2017-10-10 8 views
1

Je veux construire un point de terminaison REST à récupérer objets, mais j'ai besoin d'envoyer des données structurées en tant que paramètres de requête (par exemple une liste). Je me demandais si ces données pouvaient être envoyées en tant que corps de requête (voir l'exemple ci-dessous). Comment dois-je gérer cela afin de respecter les bonnes pratiques REST? Quel verbe HTTP devrais-je utiliser?Comment envoyer des données structurées à un point de terminaison REST qui récupère des objets? Quel verbe HTTP devrait être utilisé?

URI

:

http://localhost:8080/products 

Demande du corps:

{ 
    "name" : "Computer", 
    "categories" : [ 
     { 
      "id" : 1 

     }, 
     { 
      "id" : 4 
     } 
    ] 
} 

Réponse:

[ 
    { 
     "id": 2, 
     "name": "Computer XP 2040", 
     "price": 800 
    }, 
    { 
     "id": 1, 
     "name": "HP Computer", 
     "price": 2000 
    }, 
    { 
     "id": 7, 
     "name": "Smart Computer", 
     "price": 1200 
    } 
] 
+0

POST serait une normale – James

+0

je suis préoccupé par POST parce que ma recherche est idempotent et aussi je ne suis pas la création d'une ressource. –

Répondre

1

POST n'est pas correct pour cela. Si vous voulez vous en tenir aux meilleures pratiques RESTful, vous devez encoder les informations dans l'uri. Notez que POST peut être mieux si vous ne voulez pas faire cela, mais puisque cette question portait sur les meilleures pratiques REST (et pas les services http en général), POST est votre meilleur choix.

J'encodez cela comme:

GET /products?name=Computer&categories=1,4 
+0

Pouvez-vous fournir une source pour "Si vous voulez vous en tenir aux meilleures pratiques RESTful, vous devez encoder les informations dans l'uri."? –

+0

@EricStein littéralement toute introduction à REST vous le dira Eric. GET = pour récupérer des informations. – Evert

+0

@EricStein en voici un extrêmement réputé: https://martinfowler.com/articles/richardsonMaturityModel.html – Evert