2013-07-01 5 views
4

J'ai une confusion avec la conception des ressources de collection. Disons que j'ai une ressource utilisateur - représentée ci-dessous. REST - Représentations de ressources et de collections

 
http://www.example.com/users/ {user-id} 
user : { 
    id : "", 
    name : "", 
    age : "", 
    addresses : [ 
    { 
     line1 : "", 
     line2 : "", 
     city : "", 
     state : "", 
     country : "", 
     zip : "" 
    } 
    ] 
} 

Maintenant, comment devrait être ma représentation des ressources de collection des utilisateurs? Devrait-il s'agir d'une liste de représentations d'utilisateurs (comme ci-dessus)? Ou peut-il être un sous-ensemble de ce comme ci-dessous:

 
http://www.example.com/users/ 
users : [ 
    { 
    id : "", 
    name : "", 
    link : { 
     rel : "self", 
     href : "https://stackoverflow.com/users/{id}" 
    } 
    } 
] 

La représentation de ressource de collection doit-elle inclure la représentation complète des ressources contenant ou peut-elle être un sous-ensemble?

+0

Vérifiez ma réponse –

Répondre

0

Cela dépend entièrement de ce que vous voulez faire. L'avantage des API REST est qu'elles sont très flexibles. Vous pouvez représenter des données de n'importe quelle manière (théoriquement) que vous voulez. Personnellement, j'aurais un attribut qui permet à l'utilisateur de spécifier un sous-ensemble ou un style de représentation. Par exemple /users/{userid}.json?output=simple ou /users/{userid}.json?subset=raw

Quelque chose le long de ces lignes serait également vous permettre de représentations de nid et peaufiner ce que vous voulez sans sacrifier la flexibilité:

/users/{userid}.json?output=simple&subset=raw 

Le ciel est la limite

0

Il n'y a pas vraiment une norme pour cela. Vous avez des options:

1. Liste des liens

Retour une liste de liens vers les ressources élément de collection (à savoir, l'ID utilisateur).

http://www.example.com/users/ 
users : [ 
    "jsmith", 
    "mjones", 
    ... 
] 

Notez que ces paramètres peuvent être interprétées comme par rapport URIs, qui prend en charge un peu la « toutes les ressources devraient être accessibles en suivant les URIs de l'URI racine » idéal.

http://www.example.com/users/ + jsmith = http://www.example.com/users/jsmith 

2. Liste des ressources partielles

Retour une liste des ressources partielles (utilisateurs), ce qui permet à l'appelant de spécifier les champs à inclure. Vous pourriez également avoir une sélection par défaut de champs au cas où l'utilisateur n'en fournirait pas - la valeur par défaut pourrait même être "inclure tous les champs".

http://www.example.com/users/?field=id&field=name&field=link 
users : [ 
    { 
    id : "jsmith", 
    name : "John Smith", 
    link : "www.google.com" 
    }, 
    ... 
] 
0

Je ferais le bien le service list grain en divertissant le

http://www.example.com/users?include=address|profile|foo|bar

Tout delimiter (autre que & et URL codées) comme , ou - peut être utilisé au lieu de |. Du côté serveur, vérifiez les attributs include et restituez la réponse JSON en conséquence.

0

Il peut s'agir d'un sous-ensemble mais dépend des données. Jetez un oeil sur le code ci-dessous.

{ 
    "usersList": { 
     "users": [{ 
      "firstName": "Venkatraman", 
      "lastName": "Ramamoorthy", 
      "age": 27, 
      "address": { 
       "streetAddress": "21 2nd Street", 
       "city": "New York", 
       "state": "NY", 
       "postalCode": 10021 
      }, 
      "phoneNumbers": [{ 
       "type": "mobile", 
       "number": "+91-9999988888" 
      }, { 
       "type": "fax", 
       "number": "646 555-4567" 
      }] 
     }, { 
      "firstName": "John", 
      "lastName": "Smith", 
      "age": 25, 
      "address": { 
       "streetAddress": "21 2nd Street", 
       "city": "New York", 
       "state": "NY", 
       "postalCode": 10021 
      }, 
      "phoneNumbers": [{ 
       "type": "home", 
       "number": "212 555-1234" 
      }, { 
       "type": "fax", 
       "number": "646 555-4567" 
      }] 
     }] 
    } 
} 
7

Les types de support définissent les règles de transmission des informations.Regardez les spécifications pour Collection+JSON et HAL pour des exemples de la façon de faire ce que vous essayez de faire.

Questions connexes