2017-02-22 26 views
2

Этот вопрос связан с simillar один отправлен на RESTful design: when to use sub-resources?, но он не упоминает этот случай.Когда использовать подресурсы в Rest API?

У меня есть этот пример

/cars/{carid} 
{ 
"id": 1, 
"brand": "something" 
"engine": 
{ 
"horse_power": 100, 
"type": "hybrid" 
} 
} 

Что бы правильное рассуждение, что могло бы помочь мне решить, если этот пример должен быть разделен на суб-ресурс, чтобы выглядеть следующим образом

/cars/{carid} 
{ 
"id": 1, 
"brand": "something" 
} 

/cars/{carid}/engine 
"engine": 
{ 
"horse_power": 100, 
"type": "hybrid" 
} 

ответ

2

Maybe расщеплению основной ресурс в несколько подресурсов имеет смысл, если основной ресурс является сложным объектом со многими массивами и другими связанными объектами.

Однако, если вас беспокоят проблемы с производительностью, имейте в виду, что premature optimization is the root of all evil. Вы не должны оптимизироваться до тех пор, пока у вас не возникнет проблема с производительностью, и вы доказали, что проблема с производительностью связана с отправкой большого количества ресурсов.


Для ситуации, указанной в вопросе, поддерживая суб-ресурс как /cars/{id}/engine может быть полезным при замене всего двигателя автомобиля, следующим образом:

PUT /cars/1/engine HTTP/1.1 
Host: example.org 
Content-Type: application/json 

{ 
    "horse_power" : 110, 
    "type" : "eletric" 
} 
HTTP/1.1 204 No Content 

При запросе /cars/1 , будет возвращено полное представление о машине, включая двигатель,:

GET /cars/1 HTTP/1.1 
Host: example.org 
Accept: application/json 
HTTP/1.1 200 OK 
Content-Type: application/json 

{ 
    "id" : 1, 
    "brand" : "something", 
    "engine" : { 
    "horse_power" : 110, 
    "type" : "eletric" 
    } 
} 

Чтобы вернуть частичное представление ресурса, рассмотрите подходы, упомянутые в этом документе answer.

При запросе /cars/1/engine, представление двигателя будет возвращено:

GET /cars/1/engine HTTP/1.1 
Host: example.org 
Accept: application/json 
HTTP/1.1 200 OK 
Content-Type: application/json 

{ 
    "horse_power" : 110, 
    "type" : "eletric" 
} 
+0

Но это также возможно с PUT /cars/1/HTTP/1.1 Ведущий: example.org Содержание -Тип: применение/JSON { «horse_power»: 110, «типа»: «Eletric» } – mko

+0

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

+0

@mko При выполнении 'PUT/cars/1' вы должны заменить целевой ресурс (в этой ситуации - автомобиль с идентификатором' 1') с представлением, отправленным в полезной нагрузке запроса. –

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