REST APIって何?

最近よく聞く「REST API」についてご紹介!そもそもAPIとは?RESTって何?という基本から簡単に解説します。近い将来、LoGoチャットやLoGoフォームにも作られるかもしれません。

こんにちは、パブリテック事業部のプロダクト担当、大場です。

今回は最近よく聞くREST APIについて、そもそもAPIとは?RESTって何?ということについて、簡単にまとめてみましたのでお付き合いください。 

APIとは

 アプリケーション・プログラミング・インターフェイスの略で、アプリケーションやソフトウェアをつなぎ合わせるためのものです。Webシステムでは、Web・AP・DBのようにサーバの役割を分けることが多いですが、Web-AP間のように、サーバ間でデータのやり取りを行いたいときにAPIが使われます。

f:id:hideki_oba:20210216151622p:plain

APサーバは特定の用途に特化したアプリケーション毎に分けたりしますが、例の図でいうとAP(ユーザ情報)は、DBにアクセスしてユーザ情報を更新したり、DBからユーザ情報を取得したりする用途のサーバになります。そのユーザ情報の操作を外から実施するために用意するものがAPIです。AP(ユーザ情報)活用のために用意したAPIをWebが呼び出すことで、Webがユーザ情報を扱うことが可能になります。

 

RESTとは

RESTという設計ルールに従って作成されたAPIをREST APIといいます。RESTとはAPIの設計ルールの1つですので、RESTに準じていないAPIもたくさんありますが、現在ではRESTのルールは非常によく使われています。
REST APIを作成するときに特に重要なことは以下の4点です。

  1. URIはリソースを表現する
  2. リソースの操作はHTTPメソッドで表現する
  3. HTTPの正しいステータスコードを返却する
  4. ステートレスであること
 
1. URIはリソースを表現する

URIには基本的に動詞を利用せず、名詞(リソース名)を利用します。先ほどのユーザ情報取得APIを作成する場合、URIを「/get/users/<ユーザID>」とするのは正しくありません。「/users/<ユーザID>」としましょう。
(必ずしも動詞を使ってはいけないということではありません)

 
2. リソースの操作はHTTPメソッドで表現する

URIにはリソースへの操作(取得、更新など)方法を含めず、HTTPのメソッドで操作内容を表現します。

  • GET:リソースの取得
  • POST:リソースの登録
  • PUT:リソースの更新
  • DELETE:リソースの削除

ユーザ情報取得APIであれば当然GETになりますね。
また、メソッドが異なれば同じURIでも問題ありませんので、以下のようにAPIを作成することもよくあります。

  • GET:/users/<ユーザID> ⇒ <ユーザID>の情報を取得する
  • POST:/users/<ユーザID> ⇒ <ユーザID>の情報を更新する
 
3. HTTPの正しいステータスコードを返却する

レスポンスには正しいHTTPのステータスコードを設定する必要があります。どんなコードがあるかはここでは説明しませんが、GETメソッドでデータが存在しない場合に404を返却するか、200で空のボディを返却するかなど、設計時にはよく検討する必要があります。

 
4. ステートレスであること

ステートレスとは状態を保持しないという意味になります。つまり、ステートレスなAPIとは実行される順番などを意識せず、それぞれのリクエストが独立しているAPIであることをいいます。
下記の例はどちらもAとBの情報を取得していますが、ステートフルの場合はAとBの情報受付APIが実行されたいう状態をサーバに保持し、情報取得APIの実行でAとBの情報を取得しています。ステートレスの場合は状態を保持しないため、AとBの情報が欲しいというデータを1つのリクエストに設定して取得していますね。つまり、リクエストが独立している、言い換えれば1つのリクエストで完結しているということを、ステートレスなAPIといいます。

 

       f:id:hideki_oba:20210224220805p:plain

 

WebAPIとは

最後に、WebAPIについても少し触れておきます。最近では単純にAPIというと、Web APIを指すことが多くなりました。WebAPIとはWeb上に公開しているAPIのことです。APIとはサーバ間でデータの操作をするために利用すると書きましたが、そのAPIをWeb上に公開し、他のサービスから利用できるようにしたものがWebAPIです。
最近、全然関係ないサービスでもログインにYahoo!のアカウントが使えることがありますよね? あれはYahoo!側で用意したWebAPIを利用して、Yahooが持している情報と連携しているのです。

 

       f:id:hideki_oba:20210303171757p:plain

 

このように WebAPIを利用すればサービスとサービスを連携することができるようになります。今後、LoGoチャットやLoGoフォームにもWebAPIを作成し、いろいろなサービスと連携する日が来るかもしれません!!