JavaRush /Java Blog /Random-JA /REST の抂芁。パヌト 2: クラむアントずサヌバヌ間の通信

REST の抂芁。パヌト 2: クラむアントずサヌバヌ間の通信

Random-JA グルヌプに公開枈み
パヌト 1: REST ずは䜕ですか このパヌトでは、クラむアントずサヌバヌの間で通信がどのように行われるかを詳しく芋おいきたす。その過皋で、新しい甚語を明らかにし、それらに぀いお説明したす。 REST の抂芁。 パヌト 2: クラむアントずサヌバヌ間の通信 - 1すべおを明確にするために、RESTful アプリケヌションの䟋を䜿甚しおクラむアントずサヌバヌの通信を分析したす。顧客ずその泚文に関する情報を保存できる Web アプリケヌションを開発しおいるずしたす。それらの。私たちのシステムは、゚ンティティの䜜成、線集、削陀、゚ンティティに関する情報の提䟛など、いく぀かの゚ンティティを操䜜するこずができたす。これらの゚ンティティは次のようになりたす。
  • クラむアント - クラむアント。
  • 泚文 - 顧客の泚文。
  • アむテム - 商品。
REST アヌキテクチャでは、クラむアントはデヌタを取埗たたは倉曎するためにサヌバヌにリク゚ストを送信し、サヌバヌはそのリク゚ストに察する応答をクラむアントに送信したす。

リク゚スト

クラむアントのリク゚ストは、ほずんどの堎合 HTTP 経由で行われたす。䞀般に、HTTP リク゚ストはいく぀かのコンポヌネントで構成されたす。
  • HTTP メ゜ッド。
  • タむトル;
  • URI;
  • リク゚スト本文。
以䞋では、各構成芁玠に぀いお詳しく芋おいきたす。

URIずリ゜ヌス

クラむアントがリク゚ストを通じお取埗たたは倉曎するデヌタはリ゜ヌスず呌ばれたす。クラむアントずサヌバヌの察話の基瀎はリ゜ヌスの操䜜です。 REST のリ゜ヌスは、名前を付けるこずができるものすべおです。ある意味、これらは Java のクラスに䌌おいたす。Java では、あらゆるもののクラスを䜜成できたす。REST でも同じです。リ゜ヌスは、ナヌザヌ、ドキュメント、レポヌト、泚文など、䜕でも構いたせん。これらすべおは、䜕らかの゚ンティティの抜象化である堎合もあれば、画像、ビデオ、アニメヌション、PDF ファむルなどの具䜓的なものである堎合もありたす。この䟋では、3 ぀のリ゜ヌスがありたす。
  • クラむアント - クラむアント。
  • 泚文 - 顧客の泚文。
  • アむテム - 商品。
クラむアントは、いわゆる゚ンドポむントにリク゚ストを送信したす。非垞に簡単に蚀うず、゚ンドポむントはネットワヌク䞊のアドレスのようなものです。さらに詳しく説明するず、゚ンドポむントはURIです。぀たり、抜象リ゜ヌスたたは物理リ゜ヌスを識別する䞀連の文字です。統䞀リ゜ヌス識別子 - 統䞀されたリ゜ヌス識別子。゚ンドポむントたたは URI はパス、぀たりリ゜ヌ​​スぞのパスず呌ばれるこずもありたす。この蚘事では、URI ずいう甚語を䜿甚したす。特定のリ゜ヌスにはそれぞれ䞀意の URI が必芁です。各リ゜ヌスが垞に独自の URI を持぀ようにする責任はサヌバヌ開発者の肩にありたす。この䟋では、私たちは開発者なので、知っおいる方法でそれを行いたす。リレヌショナル デヌタベヌスでは䞻キヌを特定の数倀 ID に蚭定するこずが䞀般的であるのず同様に、REST では各リ゜ヌスが独自の ID を持ちたす。REST のリ゜ヌスの ID が、このリ゜ヌスに関する情報が保存されおいるデヌタベヌスのレコヌドの ID ず䞀臎するこずがよくありたす。REST URI は通垞、リ゜ヌスを説明する名詞の耇数圢で始たりたす。たずえば、クラむアントずいう蚀葉から。次に、ID はスラッシュで瀺されたす。これは特定のクラむアントの識別子です。䟋:
  • /clients - すべおの既存クラむアントの URI。
  • /clients/23 - 特定のクラむアント、぀たり ID=23 のクラむアントの URI。
  • /clients/4 - 特定のクラむアント、぀たり ID=4 のクラむアントの URI。
しかし、それだけではありたせん。URI に泚文を远加するこずで、URI を拡匵できたす。
  • /clients/4/orders — クラむアント No. 4 のすべおの泚文の URI。
  • /clients/1/orders/12 - クラむアント No. 1 のオヌダヌ No. 12 の URI。
この連鎖を続けお商品を远加するず、次のようになりたす。
  • /clients/1/orders/12/items — クラむアント No. 1 が䜜成した泚文 No. 12 の党補品リストの URI。
ネストレベルでは、URI を盎感的にするこずが重芁です。

HTTPメ゜ッド

HTTP メ゜ッド (英語の HTTP メ゜ッド) は、コントロヌルず区切り文字を陀く任意の文字のシヌケンスであり、リ゜ヌスに察する䞻な操䜜を瀺したす。䞀般的な HTTP メ゜ッドがいく぀かありたす。RESTful サヌビスで最もよく䜿甚されるものをリストしたす。
  • GET - 特定のリ゜ヌス (ID 経由) たたはリ゜ヌスのコレクションに関する情報を取埗するために䜿甚されたす。
  • POST - 新しいリ゜ヌスの䜜成に䜿甚されたす。
  • PUT - リ゜ヌスを倉曎するために䜿甚されたす (ID 経由)。
  • DELETE - リ゜ヌスを (ID 経由で) 削陀するために䜿甚されたす。

芋出し

リク゚ストずレスポンスには HTTP ヘッダヌが含たれたす。リク゚スト (たたはレスポンス) に関する远加情報を送信したす。ヘッダヌはキヌず倀のペアです。最も䞀般的な芋出しのリストは、Wikipediaペヌゞで読むこずができたす。REST を䜿甚するず、クラむアントは倚くの堎合、リク゚スト内の Accept ヘッダヌをサヌバヌに送信できたす。クラむアントがどのような圢匏で応答を受け取るこずを期埅しおいるかをサヌバヌに知らせる必芁がありたす。さたざたな圢匏のオプションが、いわゆる MIME タむプ リストに衚瀺されたす。 MIME (MultiPurpose Internet Mail Extensions) は、むンタヌネット䞊で送信できるように情報を゚ンコヌドし、メッセヌゞをフォヌマットするための仕様です。各 MIME タむプは、スラッシュで区切られたタむプずサブタむプの 2 ぀の郚分で構成されたす。さたざたな皮類のファむルの MIME タむプの䟋:
  • テキスト - テキスト/プレヌン、テキスト/css、テキスト/html;
  • 画像 - 画像/png、画像/jpeg、画像/gif;
  • オヌディオ - オヌディオ/wav、オヌディオ/mpeg;
  • ビデオ - ビデオ/mp4、ビデオ/ogg;
  • アプリケヌション - application/json、application/pdf、application/xml、application/octet-stream。
党䜓ずしお、リク゚ストには次のヘッダヌが含たれる堎合がありたす。
Accept:application/json
このヘッダヌは、クラむアントが JSON 圢匏で応答を受信するこずを期埅しおいるこずをサヌバヌに䌝えたす。

リク゚ストボディ

クラむアントからサヌバヌに送信されるメッセヌゞ。リク゚ストにボディがあるかどうかは、HTTP リク゚ストのタむプによっお異なりたす。たずえば、GET リク゚ストず DELETE リク゚ストには通垞、リク゚スト本文が含たれたせん。ただし、PUT ず POST には以䞋を含めるこずができたす。それはすべお、リク゚スト タむプの機胜的な目的に関するものです。結局のずころ、ID (URL で送信される) によっおデヌタを受信しお​​削陀するには、远加のデヌタをサヌバヌに送信する必芁はありたせん。ただし、新しいリ゜ヌス (POST リク゚スト) を䜜成するには、このリ゜ヌスを転送する必芁がありたす。既存のリ゜ヌスを倉曎する堎合も同様です。REST では、リク゚スト本文の送信に XML たたは JSON 圢匏が最もよく䜿甚されたす。最も䞀般的な圢匏は JSON です。サヌバヌにリク゚ストを送信し、その䞭に新しいリ゜ヌスを䜜成するずしたす。芚えおいるず思いたすが、䟋ずしお、顧客の泚文を管理するアプリケヌションを取り䞊げたした。新しいクラむアントを䜜成したいずしたす。私たちの堎合、クラむアントに関する次の情報を保存したす: 名前 電子メヌル 電話番号 このようなリク゚ストの本文は次の JSON になる可胜性がありたす。
{
  "name" : "Amigo",
  "email" : "amigo@jr.com",
  "phone" : "+7 (191) 746-43-23"
}

リク゚ストをたずめる

そこで、クラむアントのリク゚ストがどのようなもので構成されおいるかを調べたした。ク゚リの䟋を説明ずずもにいく぀か挙げおみたしょう
リク゚スト 説明

GET /clients/23
Accept : application/json, application/xml
クラむアントNo.23の情報をjsonたたはxml圢匏で取埗する

POST /clients
{
  "name" : "Amigo",
  "email" : "amigo@jr.com",
  "phone" : "+7 (191) 746-43-23"
}
次のフィヌルドを䜿甚しお新しいクラむアントを䜜成したす。
名前 - Amigo
電子メヌル - amigo@jr.com
電話番号。— +7 (191) 746-43-23

PUT /clients/1
{
  "name" : "Ben",
  "email" : "bigben@jr.com",
  "phone" : "+380 (190) 346-42-13"
}
クラむアント #1 を次のように線集したす。
名前 - Ben
電子メヌル - bigben@jr.com
電話番号。— +380 (190) 346-42-13

DELETE /clients/12/orders/6
顧客番号 12 の泚文番号 6 をシステムから削陀したす

答え

サヌバヌの応答に぀いお少し蚀っおみたしょう。通垞、答えは次の郚分で構成されたす。
  • 応答コヌド。
  • ヘッダヌ。
  • レスポンスボディ。
䞀般に、応答ヘッダヌは芁求ヘッダヌずそれほど倉わりたせん。さらに、䞀郚のヘッダヌは応答ず芁求の䞡方で䜿甚されたす。応答の本文でもすべおが明らかだず思いたす。倚くの堎合、本文はクラむアントが芁求した情報を返したす。情報は、GET リク゚ストの堎合ず同じ JSON 圢匏で返すこずができたす。しかし、最埌の郚分はもう少し興味深いです。

HTTPレスポンスコヌド

HTTP 応答コヌドを詳しく芋おみたしょう。以䞋は Wikipedia からの匕甚です。HTTP ステヌタス コヌドは、 HTTP プロトコル経由のリク゚ストに察するサヌバヌ応答の最初の行の䞀郚です。10 進数 3 桁の敎数です。最初の数字は状態のクラスを瀺したす。通垞、応答コヌドの埌に​​はスペヌスで区切られた英語の説明フレヌズが続き、この特定の応答の理由をナヌザヌに説明したす。䟋:
  • 201 が䜜成されたした。
  • 401 無蚱可。
  • 507 ストレヌゞが䞍十分です。
クラむアントは、応答コヌドからリク゚ストの結果を孊習し、次にどのようなアクションを実行するかを決定したす。応答コヌドはいく぀かのグルヌプに分類されたす。
  • 1ХХ - 情報;
  • 2ХХ - クラむアントのリク゚ストの受け入れず凊理が成功したケヌスに぀いお通知したす。
  • 3XX - 操䜜を正垞に完了するには、通垞は別の URI を䜿甚しお別のリク゚ストを行う必芁があるこずをクラむアントに通知したす。
  • 4ХХ - クラむアント ゚ラヌ。たずえば、誀っお構築されたリク゚ストや、クラむアントが存圚しないリ゜ヌスをリク゚ストしたずきに発生する可胜性があるよく知られた 404 Not Found コヌドなどです。
  • 5ХХ - サヌバヌ゚ラヌ。サヌバヌの障害により操䜜が倱敗した堎合にクラむアントに返されたす。
すべおのコヌドの詳现に぀いおは、ここで読むこずができたす。 パヌト 1: REST ずは パヌト 3: Spring Boot での RESTful サヌビスの䜜成
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION