0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

REST APIとは?? ~ステートフル、リソースについて解説~

Last updated at Posted at 2024-11-27

実務ではMVCフレームワークを使ったアプリがメインですが、
先日Udemyの教材を見ながらGo言語でREST APIの構築を経験しました。

せっかく学習したのでブログにまとめてみたいと思います。
まずREST APIの説明の前にAPIについてご紹介します!

APIとは??

APIとはソフトウェアの機能を共有することです。

実際にAPIを使用する流れを見てみましょう。
例えば、あるサービスがユーザー情報を提供するAPIを公開していたとします。

1. リクエストを送信

APIに対してGETメソッドを使ってリクエストを送信します。

GET /api/get-users/99

2. APIがプログラムを実行

APIが受け取ったリクエストに基づいてid = 99のユーザー情報をデータベースから取得し、jsonデータに変換します。

3. レスポンスデータを送信

{
"id": "99",
"name": "山田太郎",
"email": "taro.yamada@example.com",
"profile_image": "https://example.com/images/taro.jpg"
}

APIが実行したプログラムからこのようなjsonデータが返されます。

このように1~3の

  1. データの送信方法
  2. 処理するプログラム
  3. レスポンスデータ

これらをまとめてAPIといいます!

REST APIとは??

REST APIとはAPIを設計するアーキテクチャの1つです。
以下に特徴をご紹介します。

1.リソース指向

REST API はリソースを基に設計します。
そしてリソースごとにURLを割り当てて設計していきます。

リソースとは?
REST APIのリソースとはデータや機能を表現する抽象的なもの。
例)ユーザー(users)記事(articles)、商品(products)

リソースの例

リソース 説明 エンドポイント
ユーザー ユーザー情報 /user
記事 投稿される記事 /article

URI、URL、エンドポイントってなんや??

REST APIを進めるなかで、
馴染みのあるURLとは別にURI、エンドポイントという言葉が出てきて混乱します…
用語の整理をしてみました!

用語 定義
URI ほぼURLと認識してよい。URLやURN(リソースを識別する番号)を含む広い概念。 https://api.example.com/users/123
URL URIの一部で、「リソースの場所」を示すもの。プロトコル、ドメイン、パス、クエリなどを含む具体的なアドレス。 https://api.example.com/users/123
エンドポイント API設計において、リソースや機能にアクセスするための接続点。通常はURLのパス部分を指す。 /users/{id}

2.HTTPメソッド使い分け

REST APIは、URLに対して、
HTTPメソッドを使い分けてデータを操作します。

例えば、RESTではないAPIの場合は、Userというリソースに対して、
それぞれURLを使い分けて操作します。

操作 エンドポイント
表示 /user/get/99
作成 /user/create/99
更新 /user/update99
削除 /user/delete/99

一方でRESTであるAPIはエンドポイントである/users/{id}に対して4つのHTTPメソッドを使い分けてリソースの操作を行います。

HTTPメソッド 処理
GET リソースの取得
POST 新しいリソースの作成
PUT 既存リソースの更新
DELETE リソースの削除

3.ステートレスである!

ステートレス・ステートフルとは?

ステート(状態)レス・フルの違いは、サーバーにログインユーザーの情報を保持しているかどうかの違いになります。

ステートレス

サーバーはログインユーザーの情報を持たず、
各リクエストにログインユーザー情報を乗せて送信されます。
サーバーに状態を保持していないため、
処理がシンプルとなり高速なレスポンスが期待できます。

またサーバーに依存しない設計になっているためスケーラビリティ(負荷分散)が高いです。

デメリット

  • クライアント側で状態を管理する必要があるため、実装が複雑になることがある。
  • 各リクエストに必要情報を送信する必要があるため冗長性が増す。

ステートフル

ログインしたユーザーの情報がサーバーに格納されます。
例えばショッピングサイトのカートに入っている、
商品の情報はサーバーのセッションに保持されます。

ユーザーはセッションが有効な時間内であれば、
カートに商品が入った状態から買い物を続けることが出来ます。

デメリット

上記のように連続的なユーザー体験を提供できますが、
サーバーに依存することになり障害がユーザーに影響を与えることがあります。

まとめ🖊️

ご覧いただきありがとうございました!
何か気になる点や、おかしな点ありましたらお気軽にコメントください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?