Come progettare un'API REStful per un motore di analisi multimediale
-
22-07-2019 - |
Domanda
Sono nuovo nel concetto Restful e devo progettare una semplice API per un servizio di analisi dei media che devo impostare, per eseguire varie attività, ad es. analisi del volto, rilevamento della regione, ecc. su immagini e video caricati.
Lo schema del mio progetto iniziale è il seguente:
- Il client invia un file XML di configurazione a
http://manalysis.com/facerecognition
. Ciò crea un profilo che può essere utilizzato per più sessioni di analisi. XML di risposta include unProfileID
per fare riferimento a questo profilo. I client possono saltare questo passaggio per utilizzare i parametri di configurazione predefiniti - Dati video POST client da analizzare in
http://manalysis.com/facerecognition
(con ProfileID come parametro, se impostato). Questo crea una sessione di analisi . XML di ritorno haSessionID
. - Il cliente può inviare un GET a
http://manalysis.com/facerecognition/SessionID
per ricevere lo stato della sessione.
Sono sulla buona strada? Nello specifico, ho le seguenti domande:
- Devo includere
riconoscimento facciale
nell'URL? Roy Fielding afferma che "un'API REST non deve definire nomi di risorse fisse o gerarchie" È un'istanza di quell'errore? - I risultati dell'analisi possono essere restituiti al client in un file XML di grandi dimensioni o quando viene rilevato ciascun evento. Come devo dire al motore di analisi dove restituire i risultati?
- Devo eliminare esplicitamente un profilo al termine dell'analisi, tramite una chiamata DELETE?
Grazie,
C
Soluzione
Puoi correggere l'URL del punto di ingresso,
GET /facerecognition
<FaceRecognitionService>
<Profiles href="/facerecognition/profiles"/>
<AnalysisRequests href="/facerecognition/analysisrequests"/>
</FaceRecognitionService>
Crea un nuovo profilo pubblicando il profilo XML nell'URL nell'attributo href dell'elemento Profili
POST /facerecognition/profiles
201 - Created
Location: /facerecognition/profile/33
Avvia l'analisi creando una nuova richiesta di analisi. Eviterei di usare il termine sessione poiché è troppo generico e ha molte associazioni negative nel mondo REST.
POST /facerecognition/analysisrequests?profileId=33
201 - Created
Location: /facerecognition/analysisrequest/2103
Controlla lo stato del processo
GET /facerecognition/analysisrequest/2103
<AnalysisRequest>
<Status>Processing</Status>
<Cancel Method="DELETE" href="/facerecognition/analysisrequest/2103" />
</AnalysisRequest>
al termine dell'elaborazione, lo stesso GET potrebbe restituire
<AnalysisRequest>
<Status>Completed</Status>
<Results href="/facerecognition/analysisrequest/2103/results" />
</AnalysisRequest>
Gli URL specifici che ho scelto sono relativamente arbitrari, puoi usare qualunque sia il più chiaro per te.