2013-12-11 5 views
0

Я хочу знать, Что прямо в RESTful prespective, когда я хочу обновить ресурс, но есть несколько операций, каждый с различным потоком в бизнес-слоеREST различных вариантов использования для обновления ресурса

, например, есть 3 случая, чтобы изменить статус задачи (все они будут обновлять задачи)

  • Acquire
  • релиз
  • Update

так, чтобы сделать то, что я бы сделать, это делает PUT для:

PUT: Tasks/{taskId}?flag=acquire 

Причина я спрашиваю, потому что если это верно, что я буду делать это:

В back end код Я установлю условие на флаг, основанный на каждом значении, будет делать что-то совершенно другое (мне не нравится это с точки зрения кода), но это правильный способ сделать это, или там является альтернативным способом определения ресурсов с точки зрения REST?

ответ

1

Я пытаюсь немного читать между строками, но мне кажется, что вы хотите выполнять операции на своих ресурсах задач, а не просто назначать им состояние. Таким образом, это будет реализовано с точки зрения POST. Однако вы не хотите перегружать POST, чтобы обозначать разные вещи на одном ресурсе. Для этого вы можете использовать ресурсы «контроллера».

Например, чтобы получить задание (например, для того, чтобы работник мог «требовать» задачу и начать ее выполнение), рабочий мог бы выполнить POST в/tasks/allocator с полезной нагрузкой, определяющей URI задачи, (возможно, без полезной нагрузки, распределитель может назначить один на основе позиции в очереди, приоритета и т. д.). Это будет иметь побочный эффект изменения состояния задачи (например, изменить статус на «в процессе», записать идентификатор работника, время начала и т. Д.).

Обновление выполняемой задачи может быть PUT, если вы просто меняете свое состояние. Если вы делаете что-то более сложное, то, возможно, POST на другой ресурс контроллера.

Освобождение задачи также может быть PUT, если вы просто изменяете свое состояние (например, очищаете присвоенный идентификатор работника, изменяете его статус, записываете время завершения). Или, опять же, это может быть другой POST для другого ресурса контроллера, если есть еще что-то.

1

Учитывая, что я действительно не понимаю, какие события триггера в этом случае (что означает «приобретать» в рамках вашего дизайна?) Я дам вам пример в реальном мире.

Подумайте о RESTful подхода как быть примерно так:

/what?property=value

Представьте {taskid} существует со следующими данными:

{ 
    "status":"dormant", 
    "owner":"user1" 
} 

PUT в силу определения, является обновлением. Поэтому в вашем случае, вы можете поместить следующий формат JSON полезной нагрузки, как:

PUT: tasks/{taskid}

{ 
    "status":"initiated", 
    "running_tasks": [ 
     "item1", 
     "item2", 
     "item6" 
    ], 
    "notify": [ 
     "user1", 
     "user8" 
    ] 
} 

будет иметь следующий эффект на данные:

{ 
    "status":"initiated", 
    "running_tasks": [ 
     "item1", 
     "item2", 
     "item6" 
    ], 
    "notify": [ 
     "user1", 
     "user8" 
    ] 
    "owner":"user1" 
} 

Если вы хотите, чтобы я включить Acquire, Release & Обновление в этом примере, пожалуйста, подробно расскажите, как выглядит ваш поток и что может сделать ?flag=acquire.

+0

его близкий к тому, что вы описали, он фактически меняет статус задачи, поэтому я решил, что должен отправить статус и значение статуса в теле, как вы описали, разница и об этом я хочу поговорить, находится в приобретая задание, он отправит электронное письмо и сохранит файл журнала вместе с разными вещами, как я подхожу к этому? –

+0

В контексте вашего обслуживания, что именно означает «приобретение» задачи? – brandonscript

Смежные вопросы