2017-08-31 4 views
1

Donc disons que j'ai trois modèles/tables: note, expédition et utilisateurs. Et je veux demander des pages des envois mais j'ai besoin d'informations à partir des notes associées (texte, image, etc.) d'un utilisateur particulier.Comment gérer deux ressources qui vont généralement être demandées entre elles dans REST?

Quelle est la meilleure façon de gérer cela?

Dois-je créer une ressource imbriquée telle que /api/shipment/note et lui ajouter des paramètres de requête pour spécifier l'ID utilisateur, la taille de page, etc.? (Est-ressources de nidification comme /api/shipment/note REST valide? J'ai vu quelque chose comme /api/note/{noteid}/shipment est valide, mais que faire équipe get ELCA)

Ou devrais-je demander à tous les envois de /api/shipment (utilisateur spécifié dans les paramètres de la requête) et demander les informations de note pour chaque expédition de /api/note/{noteid}?

Ou devrais-je utiliser /api/user/{userid}/shipment/note?

Ou parce que je vais très rarement demander la ressource d'expédition sans les informations de la note, dois-je simplement ajouter les informations de note dans le point de terminaison /api/shipment?

Répondre

1

Si votre cas d'utilisation vous demande d'interroger simultanément l'envoi et la note, il serait plus efficace de combiner les appels. Cela suppose également que les deux ensembles de données proviennent du même magasin de données.

Pour gérer les cas où vous n'avez pas besoin des données note, vous pouvez introduire un niveau de verbosité ou un paramètre de chaîne de requête include pour identifier les données supplémentaires qui doivent être incluses.

api/expédition include = Note |? Foo |? Bar

OU

api/envoi/{id} include = note

1

Un couple plus possibilités basées sur les réponses de here.

a) L'utilisation d'un type de support personnalisé:

GET /api/shipments HTTP/1.1 
Host: example.com 
Accept: application/vnd.company.full+json 

Crédit: https://stackoverflow.com/a/42147688/8543451

b) Utiliser de nouveaux critères d'évaluation spécifiques au contenu:

/api/shipments/withNotes 

crédit: https://stackoverflow.com/a/42146963/8543451

c) En tant que ressource combinée

Ceci est essentiellement b) mais avec une torsion:

/api/shipmentsWithNotes 

C'est parce qu'il réifie le concept rejoint as a noun.