Cómo diseñar una API REStful para un motor de análisis de medios
-
22-07-2019 - |
Pregunta
Soy nuevo en el concepto de Restful y tengo que diseñar una API simple para un servicio de análisis de medios que necesito configurar, para realizar varias tareas, p. análisis de rostros, detección de regiones, etc. en imágenes y videos cargados.
El esquema de mi diseño inicial es el siguiente:
- El cliente envía un archivo XML de configuración a
http://manalysis.com/facerecognition
. Esto crea un perfil que puede usarse para múltiples sesiones de análisis. El XML de respuesta incluye unProfileID
para referirse a este perfil. Los clientes pueden omitir este paso para usar los parámetros de configuración predeterminados - Los datos de video POST del cliente se analizarán en
http://manalysis.com/facerecognition
(con ProfileID como parámetro, si está configurado). Esto crea una sesión de análisis . El XML de retorno tiene elSessionID
. - El cliente puede enviar un GET a
http://manalysis.com/facerecognition/SessionID
para recibir el estado de la sesión.
¿Estoy en el camino correcto? Específicamente, tengo las siguientes preguntas:
- ¿Debo incluir
facerecognition
en la URL? Roy Fielding dice que "una API REST no debe definir nombres de recursos fijos o jerarquías". ¿Es esta una instancia de ese error? - Los resultados del análisis pueden devolverse al cliente en un archivo XML grande o cuando se detecta cada evento. ¿Cómo debo decirle al motor de análisis dónde devolver los resultados?
- ¿Debería eliminar explícitamente un perfil cuando se realiza el análisis, a través de una llamada ELIMINAR?
Gracias,
C
Solución
Puede corregir la URL del punto de entrada,
GET /facerecognition
<FaceRecognitionService>
<Profiles href="/facerecognition/profiles"/>
<AnalysisRequests href="/facerecognition/analysisrequests"/>
</FaceRecognitionService>
Cree un nuevo perfil publicando el perfil XML en la URL en el atributo href del elemento Perfiles
POST /facerecognition/profiles
201 - Created
Location: /facerecognition/profile/33
Inicie el análisis creando una nueva solicitud de análisis. Evitaría usar el término sesión, ya que es demasiado genérico y tiene muchas asociaciones negativas en el mundo REST.
POST /facerecognition/analysisrequests?profileId=33
201 - Created
Location: /facerecognition/analysisrequest/2103
Verifique el estado del proceso
GET /facerecognition/analysisrequest/2103
<AnalysisRequest>
<Status>Processing</Status>
<Cancel Method="DELETE" href="/facerecognition/analysisrequest/2103" />
</AnalysisRequest>
cuando el procesamiento ha finalizado, el mismo GET podría volver
<AnalysisRequest>
<Status>Completed</Status>
<Results href="/facerecognition/analysisrequest/2103/results" />
</AnalysisRequest>
Las URL específicas que he elegido son relativamente arbitrarias, puede usar lo que sea más claro para usted.