2017-02-22 3 views
2

Cette question est liée à un simillar un posté sur RESTful design: when to use sub-resources? mais il ne mentionne pas ce cas.Quand utiliser des sous-ressources dans Rest API?

Je cet exemple

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

Quelle serait un raisonnement correct qui pourrait me aider à décider si cet exemple devrait être divisé en une sous-ressource pour ressembler à ceci

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

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

Répondre

2

Peut-être que le fractionnement la ressource principale en sous-ressources multiples a du sens si la ressource principale est une entité complexe avec de nombreux tableaux et d'autres entités apparentées. Toutefois, si vous êtes préoccupé par les problèmes de performances, gardez à l'esprit que premature optimization is the root of all evil. Vous ne devriez pas optimiser jusqu'à ce que vous ayez un problème de performance et vous avez prouvé que le problème de performance provient de l'envoi d'une grande représentation des ressources.


Pour la situation mentionnée dans la question, soutient un sous-ressources comme /cars/{id}/engine pourrait être utile lors du remplacement du moteur tout de la voiture, comme suit:

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 

Lorsque vous demandez /cars/1 , une représentation complète de la voiture, y compris le moteur, serait retourné:

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" 
    } 
} 

Pour retourner une représentation partielle de la ressource, prenez en compte les approches mentionnées dans ce answer.

Lors d'une demande /cars/1/engine, la représentation du moteur serait renvoyé:

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

Mais ce serait aussi possible avec PUT /cars/1/HTTP/1.1 Hôte: example.org contenu -type: application/json { "horse_power": "type" 110, : "eletric" } – mko

+0

je cherchais plus de repos avantages liés à d'autres lors de la répartition des ressources de code alors plus propre et moins de balisage. – mko

+0

@mko Lorsque vous exécutez 'PUT/cars/1', vous devez remplacer la ressource cible (dans ce cas, la voiture portant l'ID '1') avec la représentation envoyée dans la charge utile de la requête. –