当サイトは、アフィリエイト広告を利用しています

HTTPとREST APIについて調べた

作成日:2023月07月28日
更新日:2024年03月09日

マイクロサービスアーキテクチャでREST APIを作ったので
REST APIやHTTPついて色々調べたことをまとめておく。

実際に実装する場合については
Pythonの軽量フレームワークであるflaskを使ったREST APIの実装方法を
下記記事で紹介しています

REST APIとは?

REST APIとはWeb APIの一つで REST(Representational State Transfer)の原則に基づいて設計されたAPIのこと。
REST APIではリクエストのHTTPメソッドとURIでデータを操作する

RESTの4つの設計原則

RESTには4つの原則があり、この原則を満たしているAPIがREST APIになる。

統一インターフェース(Uniform Interface)

情報の操作(取得、作成、更新、削除)は全てHTTPメソッド(GET、POST、PUT、DELETE)を利用すること。
インターフェースが統一されていればブラウザ・JavaScriptコード・モバイルアプリケーションなど
RESTを利用するクライアントであれば同じ方法でサーバーが呼び出せ、リソースにアクセスができるようにする。

アドレス可能性(Addressability)

提供する情報がURIを通して表現できること。
全ての情報はURIで表現される一意なアドレスを持っていること。

接続性(Connectability)

情報の内部に、別の情報や(その情報の別の)状態へのリンクを含めることができること。

ステートレス性(Stateless)

HTTPをベースにしたステートレスなクライアント/サーバプロトコルであること。
セッション等の状態管理はせず、やり取りされる情報はそれ自体で完結して解釈できること。

URLとURIとエンドポイントとは?

REST APIのURL,URI,エンドポイントについて例えば

https://scrawledtechblog.com/blog?flg=true&id=3

を詳しく見てみる。
分解すると

  • https: :使用するプロトコル
  • scrawledtechblog.com:リソースを保持していいるホストまたはドメイン
  • blog :リソースが保持されているホスト内のパス(パスパラメータ)
  • flg=true&id=3 :クエリパラメータ

になる。

これをURL,URI,エンドポイントにわけると下記のようになる。

URL

クエリパラメータまで全てを含んだ

がURL。

URI

パスパラメータまでを含み、クエリパラメータを含まない

がURI。

エンドポイント

URIと同じくパスパラメータまでを含み、クエリパラメータを含まない

がエンドポイント。

URIとエンドポイントは文脈や使われ方によって変わるので曖昧だが
個人的に同じものとして理解している

厳密にはURIとエンドポイントは異なる概念らしいが、文脈として同じものを指すこともあるらしい。
なるほど。。。わからん

エントリーポイントとエンドポイントの違いは?

REST APIを調べていると

  • エンドポイント
  • エントリーポイント

という言葉をよく見かけたので、ちょっと調べてみた

エンドポイント

エンドポイントはAPI連携するためのURIのこと。 ユーザー視点。

エントリーポイント

エンドポイントと同じ。
視点をAPI公開側にした場合にエントリーポイントと呼ばれる。

REST APIと通常APIとの違い

大きく違うのはエンドポイントのURIの決まり方が異なる。

通常のAPIの場合

フロントエンドとバックエンドに別れたSPAのシステムの場合
例えばデータに対する処理のURIは下記のようになることが多い。

登録処理

登録処理をする場合のURI
https://scrawledtechblog.com/blog/registArticle

参照処理

参照処理をする場合のURI
https://scrawledtechblog.com/blog/getArticle

更新処理

更新処理をする場合のURI
https://scrawledtechblog.com/blog/updateArticle

削除処理

削除処理をする場合のURI
"ttps://scrawledtechblog.com/blog/deleteArticle

上記のように処理自体にURIが紐づく形になる。

REST APIの場合

通常APIに対してREST APIは処理に対しては紐づかず
リソースに対してURLが決まる。

REST APIの場合はエンドポイントとなるURIは
下記のようになる。

https://scrawledtechblog.com/blog

ただこれだけだとなんの処理なのかわからないので 何の処理を行うかをHTTPメソッドで指定する。

つまり、REST APIは処理を

  • HTTPメソッド
  • エンドポイント(URI)

の組み合わせで判断する。 REST APIでの処理の分け方は下記のようになる。

登録処理

HTTPメソッド:POST
URL     :https://scrawledtechblog.com/blog

参照処理

HTTPメソッド:GET
URL     :https://scrawledtechblog.com/blog

更新処理

HTTPメソッド:PUT
URL     :https://scrawledtechblog.com/blog

削除処理

HTTPメソッド:DELETE
URL     :https://scrawledtechblog.com/blog

HTTPリクエストとは?

HTTP通信において、クライアントからWebサーバーの送られるのが
HTTPリクエスト。

HTTPリクエストの構成(中身)

HTTPリクエストは

  • HTTPリクエスト行(リクエストライン)
  • HTTPリクエストヘッダ(ヘッダ)
  • HTTPリクエストメッセージボティ(メッセージボディ)

で構成される。

構造としては

  • HTTPリクエスト行
  • HTTPリクエストヘッダ
  • 空行
  • HTTPリクエストメッセージボティ

のように、ヘッダとボディの間に空行が入る。

HTTPリクエスト行(リクエストライン)

言い方がリクエスト行だったりリクエストラインだったりする。
書式は

【メソッド】[空白]【URI】[空白]【HTTPのバージョン】

なる。

メソッドにはHTTPメソッド(GETとかPOSTとか)が入り、
URIにはアクセスするリソースが入る。

HTTPリクエストヘッダ(ヘッダ)

ヘッダーにはリクエストの詳細情報(User-Agent当)が入る。

書式は

【フィールド名】:【内容】

の形になってる。

HTTPリクエストメッセージボティ(メッセージボディ)

メッセージボディには画面の入力内容など、サーバー側に渡したい情報が入る。
GETのように必要がない場合は特に何も書かれない。

パスパラメータとは?

リソースを識別するために必要な情報が指定される
URIのホスト名(ドメインでない)かつ、クエリパラメータでない部分のこと

https://scrawledtechblog.com/blog?flg=true&id=3

であれば「blog」がパスパラメータ。

クエリパラメータとは?

リソースを操作して取得するのに必要な情報が指定される
?の後に指定されているもの

ルールとしては

  • URLの?以降の文字列
  • 「名前=値」の形式
  • 複数ある場合は「&」でつなげる

例えば

https://scrawledtechblog.com/blog?flg=true&id=3

であれば「flg=true&id=3」がクエリパラメータ。

クエリパラメータ、クエリ文字列、クエストリング、URLパラメータなど
呼び方がたくさんある。

HTTPレスポンスとは?

HTTP通信において、Webサーバーからクライアントへ返されるのが
HTTPレスポンス。

HTTPレスポンスの構成(中身)

HTTPリクエストは

  • HTTPステータスライン(ステータスライン)
  • HTTPレスポンスヘッダ(ヘッダ)
  • HTTPレスポンスボティ(レスポンスボディ)

で構成される。

構造としては

  • HTTPステータス行
  • HTTPレスポンスヘッダ
  • 空行
  • HTTPレスポンスボティ

のように、HTTPリクエストど同様にヘッダとボディの間に空行が入る。

HTTPステータス行(ステータスライン)

ステータスラインにHTTPリクエスト結果が書いてある。
重要なのはステータスコードで「200」とか[404]とか

書式は

【HTTPのバージョン】[空白]【ステータスコード】[空白]【ステータスコードの説明】

なる。

※ステータスコードはググればすぐでてくるので割愛。

HTTPレスポンスヘッダ(ヘッダ)

ヘッダーにはレスポンスの詳細情報(サーバー情報とかコンテントタイプ)が入る。

書式は

【フィールド名】:【内容】

の形になってる。

HTTPレスポンスボディ

HTTPレスポンスにはリクエストで要求された相手がほしかった情報が入っている
例えば

  • webページの表示要求であればHTMLが返される
  • REST APIに対する要求であれば処理結果としてJSON形式のデータが返される

のような感じ。

まとめ

今まで何となくイメージでHTTPを使ってきたが、REST APIを設計するにあたり
HTTP周りの用語や構造を調べて整理してみた。

参考

関連記事

新着記事

top