[JAVA] [RESTful API] Unterschiede und Design von Pfadparametern, Abfrageparametern und Anforderungskörpern

Der Anfang der Sache

Ich arbeite als einfache Rezeption, aber als ich gebeten wurde, eine RESTful-API zu entwerfen, habe ich viel über die RESTful-API recherchiert. Ich habe darüber nachgedacht, wie Pfadparameter, Abfrageparameter und Anforderungskörper richtig verwendet werden, daher möchte ich die Ergebnisse als Erinnerung behalten. (Es sind ziemlich grundlegende Informationen, also für Anfänger.)

Was in diesem Artikel zu schreiben

--Welche der HTTP-Anforderungen sind Pfadparameter, Abfrageparameter und Anforderungskörper? ――Welche Informationen sollten im Pfadparameter, Abfrageparameter und Anforderungshauptteil enthalten sein?

Schreiben Sie nicht in diesen Artikel (Grundkenntnisse zum Lesen dieses Artikels)

Was ist eine HTTP-Anfrage?

Ich werde die Erklärung diesem Artikel überlassen. "HTTP-Anfrage" und "HTTP-Antwort" / ITSakura

Was ist die RESTful-API?

Ich werde die Erklärung diesem Artikel überlassen. Was ist RESTful API / @ NagaokaKenichi

Was sind Pfadparameter, Abfrageparameter und Anforderungskörper?

Zunächst werde ich über Pfadparameter, Abfrageparameter und Anforderungskörper schreiben.

Pfadparameter, Abfrageparameter

Was von URI gesendet wird, ist der Pfadparameter und der Abfrageparameter.

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

Wie Sie dem Beispiel entnehmen können, Nach der Domain mit URI? Was vorher kommt, ist der Pfadparameter. Und was kommt danach? Ist der Abfrageparameter.

Text anfordern

Es wird in JSON gesendet, nicht in URI.

{
  hoge_name: fugafuga,
  description: hogefugahoge,
}

Zum Beispiel sieht es so aus.

Welche Informationen sollten im Pfadparameter, Abfrageparameter und Anforderungshauptteil enthalten sein?

Pfadparameter

Zuerst den Pfadparameter, in den Sie ** die Informationen eingeben, die zur Identifizierung einer bestimmten Ressource ** erforderlich sind.

Angenommen, Sie haben eine Tabelle mit dem Namen group, in der Benutzer wie ↓ gebündelt sind, und möchten von dort aus Benutzer einer bestimmten Gruppe (Gruppe 1) zuordnen.

groups_table

group_id group_name description
1 hoge Es ist eine Gruppe von Hoge.
2 piyo Es ist eine Gruppe von Piyo.

users_table

user_id user_name gruop_id description
1 hoge 1 Es gehört zur Hoge-Gruppe.
2 fuga 1 Es gehört zur Hoge-Gruppe.
3 piyo 1 Es gehört zur Hoge-Gruppe.
4 inu 1 Es gehört zur Hoge-Gruppe.
5 neko 2 Es gehört zur Gruppe der Piyo.

In diesem Fall ist ** groupId = 1 ** eine ** Information, die zum Identifizieren einer bestimmten Ressource ** erforderlich ist. Das Design und die API, die tatsächlich getroffen werden sollen, lauten also wie folgt.

Design


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

API, um tatsächlich zu treffen


https://example.com/groups/1

(Ich mag die Endpunktgruppen.)

Parameter abfragen

Geben Sie als Nächstes in Bezug auf die Abfrageparameter ** die Informationen ein, die zum Betreiben und Abrufen einer bestimmten Ressource erforderlich sind **.

Angenommen, Sie möchten 3 Benutzer, die einer bestimmten Gruppe (Gruppe 1) zugeordnet sind, aus der vorherigen Tabelle in absteigender Reihenfolge von user_id abrufen.

In diesem Fall ist die Bedingung ** 3 Fälle ** und ** absteigende Reihenfolge von Benutzer-ID ** ** Informationen, die zum Betreiben und Erfassen einer bestimmten Ressource ** erforderlich sind. Daher sind das Design und die API, die tatsächlich getroffen werden sollen, wie folgt. Werden.

Design


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

API, um tatsächlich zu treffen


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

(Die Sortierung ist so eingestellt, dass die aufsteigende Reihenfolge falsch und die absteigende Reihenfolge wahr ist.) Andere scheinen Bedingungen im Zusammenhang mit ** Suche, Filter ** usw. als Abfrageparameter zu behandeln.

Text anfordern

Schließlich wird in Bezug auf den Anfragetext ** der hinzuzufügende oder zu aktualisierende Inhalt ** hier eingegeben.

Angenommen, Sie möchten eine bestimmte Gruppe (Gruppe 1) aus der obigen Tabelle aktualisieren.

In diesem Fall ist die Bedingung für ** zu aktualisierenden Inhalt ** normaler ** Inhalt beim Hinzufügen oder Aktualisieren **, sodass das Design und die API, die tatsächlich getroffen werden sollen, wie folgt sind.

Design(URI)


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

Design(JSON)


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

API, um tatsächlich zu treffen


https://example.com/groups/1

JSON anzufordern


{
  group_name: "hogehogehoge",
  group_description: "Hogehogehoge Gruppe"
}

Zusammenfassung

Wenn Sie dies berücksichtigen, können Sie möglicherweise auf leicht verständliche Weise entwerfen. Ich lese die GoodParts von O'Reilly Japans Web-API, daher kann ich sie erneut hinzufügen, wenn ich sie lese.

Danke fürs Lesen. Ich wäre Ihnen dankbar, wenn Sie mich über Missverständnisse informieren könnten!

Recommended Posts

[RESTful API] Unterschiede und Design von Pfadparametern, Abfrageparametern und Anforderungskörpern
Das Designkonzept der Datums- und Uhrzeit-API von Java ist interessant
[Rails] Unterschiede und Verwendung von each_with_index und each.with_index