Sto costruendo un'interfaccia utente web di file manager (front end ReactJS, back end Flask). L'API RESTful sembra essere molto adatta in questa situazione a prima vista, ma mi trovo nei guai.
Ho bisogno che API contenga:
- Operazione lista: ottieni tutte le informazioni sul percorso in una cartella (percorso), come
ls
comando - Elimina operazione: elimina percorso
- Rinomina operazione: rinomina percorso
- Modifica autorizzazione Operazione: modifica autorizzazione percorso
- Sposta operazione: sposta il percorso in un altro percorso
- Operazione di copia: copia il percorso in un altro percorso
"Rinomina" e "modifica autorizzazione" possono essere inclusi in un'operazione di modifica.
Inutile:
-
getPathInfo
Operazione: ottieni informazioni sul percorso (permesso, è una cartella o no, qualcos'altro), perché l'elenco Operazione ottiene le informazioni e imposta su ogni bambino, quindi non è necessario interrogare un singolo percorso.
All'inizio pensavo che un percorso fosse facile da trasformare in un'API riposante, ma ora ci sono alcuni problemi.
Uso node
nel punto path
:
api = Blueprint('api', __name__, url_prefix='/api')
api_wrap = Api(api)
@api_wrap.resource('/nodelist/<path:path>')
class NodeList(Resource):
def get(self, path='.'):
return filemgr.list(path)
@api_wrap.resource('/node/<path:path>')
class Node(Resource):
def get(self, path):
return ''
def delete(self, path):
if not path:
return 403
return filemgr.delete(path)
def post(self, path):
deserialized = NodeSerializer().deserialize(json.loads(request.data))
return filemgr.create(path, deserialized)
def put(self, path):
deserialized = NodeSerializer().deserialize(json.loads(request.data))
return filemgr.modify(path, deserialized)
La risorsa è node
, ma dove posiziono move
e copy
? Qual è il modo corretto di scrivere un'operazione di spostamento e copia? Crea un'altra risorsa? Sembra strano, e l'API JSON comune è più chiara:
@api.route('/move', methods=['POST'])
def move():
data = json.loads(request.data)
ret = filemgr.move(data['src'], data['dst'])
return jsonify(ret)
In realtà, sto confondendo se posso utilizzare RESTful nel mio progetto.
Imposta un rename
L'operazione è più chiara di RESTful put
:
@api.route('/rename', methods=['POST'])
def rename():
data = json.loads(request.data)
ret = filemgr.rename(data['path'], data['name'])
return jsonify(ret)
Mi chiedo quale sia il modo corretto di progettare API RESTful per il file manager:
- Completamente RESTful; come può essere nominato?
- Half RESTful, mixin common JSON API; è bello mescolare API RESTful con altri?
- Non utilizzare RESTful qui e perché?