Progettazione di un'API RESTful per un file manager

0

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:

  1. Completamente RESTful; come può essere nominato?
  2. Half RESTful, mixin common JSON API; è bello mescolare API RESTful con altri?
  3. Non utilizzare RESTful qui e perché?
posta Mithril 12.07.2016 - 11:08
fonte

1 risposta

1

Non lasciarti coinvolgere dal solito modo in cui le cose sono fatte, un'API può essere riposante senza dover specificare l'identificativo della risorsa nell'URL. Nel tuo caso, direi che è perfettamente accettabile posizionare il percorso (i percorsi) nel corpo del POST.

    
risposta data 12.07.2016 - 11:15
fonte

Leggi altre domande sui tag