Ресурс RESTful подтипа - PullRequest
       15

Ресурс RESTful подтипа

4 голосов
/ 08 января 2012

один вопрос передовой практики. Если вы разрабатываете интерфейс RESTful, как бы вы различали подтипы. Например. в вашем приложении есть животные (каждое животное идентифицируется по их animalId) с подтипами собаки и птицы, где каждый подтип имеет свои специфические подресурсы. Например. собаки имеют длину хвоста и птичьи крылья (что бы это ни было). Какой из этих (или вы думаете о каких-либо лучших) подходов вы бы выбрали?

1)
/animals/{animalId}/tail-length (400 when animal is bird)
/animals/{animalId}/wings-length (400 when animal is dog)

2)
/dogs/{animalId}/tail-length
/birds/{animalId}/wings-length

3)
/animals?type=dog/{animalId}/tail-length
/animals?type=bird/{animalId}/wings-length

Ответы [ 2 ]

3 голосов
/ 10 января 2012

Предполагая, что между различными подклассами нет сговора ID, я бы порекомендовал следующее:

GET /animals/:id

С ответом, подобным этому.(Этот пример - JSON, но может быть и XML / и т. Д.)

{
  "id": "xyz",
  "type": "dog",
  "tailLength" 400
}

Это делает его простым и RESTful.

1 голос
/ 09 января 2012

Это действительно вопрос личных предпочтений.

Лично я избегаю помещать информацию в строку запроса, как в варианте 3, так как я склонен использовать строку запроса для неиерархической информации. (Принятый ответ на на этот вопрос говорит о том, что первые два являются более правильными, в то время как в ответе с наибольшим количеством голосов говорится, что это действительно не имеет значения.)

Кэширование также является важным фактором, поскольку прокси-серверы могут не кэшировать ресурс, содержащий строку запроса (см. рекомендации Google по использованию кэшей прокси ).

Думаю, я бы выбрал второй или, возможно, гибрид (/animals/dogs/...), чтобы указать иерархическую структуру ваших ресурсов, но это зависит от вас.

...