[JAVA] [API RESTful] Différences et conception des paramètres de chemin, paramètres de requête, corps de requête

Le début de l'affaire

Je travaille comme une réception de base, mais quand on m'a demandé de concevoir une API RESTful, j'ai fait beaucoup de recherches sur l'API RESTful. J'ai réfléchi à la façon d'utiliser correctement les paramètres de chemin, les paramètres de requête et les corps de requête, je voudrais donc garder les résultats comme un rappel. (Ce sont des informations assez basiques, donc c'est pour les débutants.)

Quoi écrire dans cet article

Ne pas écrire dans cet article (connaissances préalables à la lecture de cet article)

Qu'est-ce qu'une requête HTTP?

Je laisserai l'explication à cet article. "Requête HTTP" et "Réponse HTTP" / ITSakura

Qu'est-ce que l'API RESTful?

Je laisserai l'explication à cet article. Qu'est-ce que l'API RESTful / @ NagaokaKenichi

Que sont les paramètres de chemin, les paramètres de requête et les corps de requête?

Tout d'abord, j'écrirai sur ce que sont les paramètres de chemin, les paramètres de requête et les corps de requête.

Paramètre de chemin, paramètre de requête

Ce qui est envoyé par URI est le paramètre de chemin et le paramètre de requête.

https://example.com/pathparameter/{pathparameter}?queryparameter1=hogehoge&queryparameter2=fugafuga

Comme vous pouvez le voir dans l'exemple, Après le domaine avec URI? Ce qui précède est le paramètre de chemin. Et ce qui vient après? Est le paramètre de requête.

Demander le corps

Il est envoyé en JSON, pas en URI.

{
  hoge_name: fugafuga,
  description: hogefugahoge,
}

Par exemple, cela ressemble à ceci.

Quel type d'informations doit être inclus dans le paramètre de chemin, le paramètre de requête et le corps de la requête?

Paramètres de chemin

Tout d'abord, le paramètre path, où vous mettez ** les informations nécessaires pour identifier une ressource particulière **.

Par exemple, supposons que vous ayez une table appelée groupe qui regroupe les utilisateurs comme ↓, et que vous souhaitez associer des utilisateurs à un groupe spécifique (groupe 1) à partir de là.

groups_table

group_id group_name description
1 hoge C'est un groupe de hoge.
2 piyo C'est un groupe de piyo.

users_table

user_id user_name gruop_id description
1 hoge 1 Il appartient au groupe hoge.
2 fuga 1 Il appartient au groupe hoge.
3 piyo 1 Il appartient au groupe hoge.
4 inu 1 Il appartient au groupe hoge.
5 neko 2 Il appartient au groupe des piyo.

Dans ce cas, ** groupId = 1 ** est ** les informations requises pour identifier une ressource spécifique **, donc la conception et l'API à atteindre sont les suivantes.

conception


https://example.com/groups/{group_id}

API pour frapper réellement


https://example.com/groups/1

(J'aime les groupes de points de terminaison.)

Paramètres de requête

Ensuite, en ce qui concerne les paramètres de requête, ** saisissez les informations nécessaires pour exploiter et récupérer une ressource spécifique **.

Supposons que vous souhaitiez associer 3 utilisateurs à un groupe spécifique (Groupe 1) de la table précédente dans l'ordre décroissant de user_id.

Dans ce cas, la condition ** 3 cas ** et ** l'ordre décroissant de user_id ** est ** les informations nécessaires pour exploiter et acquérir une ressource spécifique **, donc la conception et l'API à atteindre sont les suivantes. Devenir.

conception


https://example.com/groups/{group_id}?sort=boolean&limit=number

API pour frapper réellement


https://example.com/groups/1?sort=false&limit=3

(Le tri est défini de sorte que l'ordre croissant est faux et l'ordre décroissant est vrai.) D'autres semblent traiter les conditions liées à la ** recherche, au filtre **, etc. comme des paramètres de requête.

Demander un corps

Enfin, concernant le corps de la requête, ** le contenu à ajouter ou à mettre à jour ** est saisi ici.

Supposons que vous souhaitiez mettre à jour un groupe spécifique (Groupe 1) à partir du tableau ci-dessus.

Dans ce cas, la condition du ** contenu à mettre à jour ** est juste ** le contenu lors de l'ajout ou de la mise à jour **, donc la conception et l'API à atteindre sont les suivantes.

conception(URI)


https://example.com/groups/{group_id}

conception(JSON)


{
  group_name: "string",
  group_description: "string"
}

API pour frapper réellement


https://example.com/groups/1

JSON à demander


{
  group_name: "hogehogehoge",
  group_description: "groupe hogehogehoge"
}

Résumé

Si vous gardez cela à l'esprit, vous pourrez peut-être concevoir de manière facile à comprendre. Je lis l'API Web d'O'Reilly Japan, les GoodParts, donc je peux l'ajouter à nouveau si je le lis.

Merci pour la lecture. Je vous serais reconnaissant de bien vouloir me faire savoir s'il y a des malentendus!

Recommended Posts

[API RESTful] Différences et conception des paramètres de chemin, paramètres de requête, corps de requête
Le concept de conception de l'API de date et d'heure de Java est intéressant
[Rails] Différences et utilisation de each_with_index et each.with_index