Как разработать REStful API для механизма анализа медиа - PullRequest
2 голосов
/ 29 октября 2009

Я новичок в концепции Restful и должен разработать простой API для службы анализа медиа, которую мне нужно настроить для выполнения различных задач, например, анализ лица, определение региона и т. д. на загруженных изображениях и видео.

Схема моего первоначального дизайна следующая:

  • Клиент отправляет файл конфигурации XML в http://manalysis.com/facerecognition. Это создает профиль , который можно использовать для нескольких сеансов анализа. XML ответа содержит ProfileID для ссылки на этот профиль. Клиенты могут пропустить этот шаг, чтобы использовать параметры конфигурации по умолчанию
  • Клиент отправляет видео данные для анализа в http://manalysis.com/facerecognition (с параметром ProfileID, если он настроен). Это создает сеанс анализа . Возвращаемый XML имеет SessionID.
  • Клиент может отправить GET на http://manalysis.com/facerecognition/SessionID для получения статуса сеанса.

Я на правильном пути? В частности, у меня есть следующие вопросы:

  • Должен ли я включить facerecognition в URL? Рой Филдинг говорит, что «API REST не должен определять фиксированные имена ресурсов или иерархии». Является ли это примером этой ошибки?
  • Результаты анализа могут быть возвращены клиенту в одном большом XML-файле или при обнаружении каждого события. Как мне указать механизму анализа, куда возвращать результаты?
  • Должен ли я явно удалять профиль после завершения анализа с помощью вызова DELETE?

Спасибо

C

1 Ответ

4 голосов
/ 29 октября 2009

Вы можете исправить URL точки входа,

GET /facerecognition

<FaceRecognitionService>
  <Profiles href="/facerecognition/profiles"/>
  <AnalysisRequests href="/facerecognition/analysisrequests"/>
</FaceRecognitionService>

Создайте новый профиль, разместив профиль XML по URL-адресу в атрибуте href элемента Profiles

POST /facerecognition/profiles
201 - Created
Location: /facerecognition/profile/33

Инициируйте анализ, создав новый запрос на анализ. Я бы не использовал термин сессия, поскольку он слишком общий и имеет множество негативных ассоциаций в мире REST.

POST /facerecognition/analysisrequests?profileId=33
201 - Created
Location: /facerecognition/analysisrequest/2103

Проверка статуса процесса

GET /facerecognition/analysisrequest/2103

<AnalysisRequest>
   <Status>Processing</Status>
   <Cancel Method="DELETE" href="/facerecognition/analysisrequest/2103" />
</AnalysisRequest>

когда обработка закончится, тот же GET может вернуть

<AnalysisRequest>
   <Status>Completed</Status>
   <Results href="/facerecognition/analysisrequest/2103/results" />
</AnalysisRequest>

Конкретные URL-адреса, которые я выбрал, относительно произвольны, вы можете использовать все, что вам больше нравится.

...