Как лучше всего разработать RESTful API для инициирования действия - PullRequest
3 голосов
/ 09 февраля 2011

Я создаю веб-сервис RESTful, который обычно использует операции CRUD для набора типов данных.Отображения глаголов HTTP для этих API-интерфейсов очевидны.

Интересная часть заключается в том, что клиент может запросить инициализацию длительной (т. Е. Часов) операции с одним из объектов данных;о состоянии операции сообщается путем запроса самого типа данных.

Например, предположим, что объект имеет следующие характеристики:

SomeDataType
{
    Name: "Some name",
    CurrentOperation: "LongOperationA",
    CurrentOperationPercent: 0.75,
    CurrentOperationEtaSeconds: 3600
}

Мой вопрос в том, какой из них лучше всего подходит для RESTful?подход должен быть для начала LongOperationA?

Наиболее очевидный подход, по-видимому, заключается в том, чтобы сделать саму операцию идентификатором, возможно, что-то вроде POST <code>https://my-web-service.com/api/StartLongOperationA?DataID=xxxx, но это кажется немного неуклюжим, даже если я не указываю данныеидентификатор как параметр запроса.

Реализовать это как идемпотентное действие также довольно тривиально, поэтому использование POST кажется пустой тратой;с другой стороны, PUT неудобно, поскольку данные фактически не записываются в службу.

Кто-нибудь еще сталкивался с подобным сценарием в своих службах?Что вы сделали, чтобы предоставить API для инициализации действий, выполняющих принципы RESTful?

TIA,

-Mark

1 Ответ

3 голосов
/ 09 февраля 2011

Вы можете сделать,

POST /LongRunningOperations?DataId=xxxx

, чтобы создать новую операцию LongRunningOperation.URI длительной операции будет возвращен в заголовке Location вместе с кодом состояния 201.

Или, если вы хотите сохранить длительные операции, связанные с DataId, вы можете выполнить

POST /Data/xxx/LongRunningOperations

Обе эти опции дадут вам возможность узнать, выполняются ли еще долго выполняющиеся операции.Если вам нужна информация после завершения операции, вы можете создать такие вещи, как

GET /CompletedLongRunningOperations
GET /Data/xxx/CompletedLongRunningOperations
GET /Data/xxx/LastCompletedLongRunningOperation
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...