Spring
2021.09.30
【5分でわかる】REST APIとは? 概要やメリット、Spring Bootを使った実装方法までまるっと解説!
2023.11.10

1.そもそもWebAPIとは?


そもそもWebAPIとは何でしょうか。APIとは「Application Programming Interface」の頭文字を取ったものです。このAPIを使用することで、HTTPプロトコルを使って外部からWebアプリのデータを取得したり機能を利用したりすることができるようになります。開発したサービスが外部から使用できるので、別のサービスなどと連携しやすくなりサービスを広げることに繋がります。

通常Webアプリを使用する際は、ブラウザからサイトへアクセスしてから画面を操作し利用します。これに対してAPIは特定のURLに対して設定されたHTTPリクエストの形で送信を行うことで、アプリの処理結果をHTTPレスポンスの形で受け取れます。

実際に天気情報や株価の情報、地図情報などさまざまな情報を取得できるAPIが存在し、私たちが日常的に使用しているサービスでも利用されています。具体的にはGoogle Maps APIなどが挙げられ、例えば食べログのサービスでは店舗の位置検索に、Google Maps APIを利用してGoogle Mapsの地図を表示しています 。




2.REST APIとは?


APIを提供する方法の一つにREST API(RESTful APIともいう)があり、現在主流となっています。このほかにXMLフォーマットでリクエストやレスポンスを行うSOAP(SimpleObject Access Protocol) APIなどがあります。

RESTは「Representational State Tranfer」の頭文字を取ったもので、リソース指向型アーキテクチャとも呼ばれるROA(Resource Oriented Architecture)を引き継いだシステム設計の方法論・思想です。このRESTに従ったAPIは具体的には以下のような特徴を持ちます。

2-1.Web上にリソースとして公開される

ROAで利用者に提供する情報やデータを「リソース」といいます。アプリにログインする際のアカウント情報や、SNSに画像や文章を投稿する1ポストなどを単位として想像するとイメージしやすいかもしれません。APIではこの「リソース」がWeb上に公開されることにより、HTTPプロトコルを使用してアクセスができます。

2-2.URIによってリソースを識別する

リソースはURI(Uniform Resource Identifier、URLなどWeb上で特定される住所や名前)を用いて、Web上で一意に識別されるものです。このURIにより利用者はWeb上でリソースに対してアクセスすることが可能となります。URIは文字から機能や内容の予測をしやすいものとする方が好ましく、例えばexample/user/editとあればユーザー情報を編集する内容かなといったように利用者が理解しやすくなります。

2-3.HTTPメソッドによってリソースを操作する

リソースに行うCRUD操作(Create,Read,Update,Delete)は、GET、PUT、POST、DELETEなどのHTTPメソッドを使って行います。たとえばリソースの取得にはGET、リソースの作成にはPOSTといったように、HTTPメソッドを統一されたルールとして扱うことで設計者・ユーザー共に理解しやすく、また互換性も高く保つことができます。

2-4.適切なHTTPステータスコードの利用

APIは大まかには利用者からリクエストを受けてレスポンスを返すものです。この際にレスポンスの内容を、適切なHTTPステータスコードで返せるように設計することで、利用者に対してAPIの使用方法や状況を正しく伝えることができます。

HTTPステータスコードには、リクエストが成功し要求した内容が正常に返ってきていることを示す「200 OK」やリクエスト先のリソースが存在しないことを示す「404 Not Found」、サーバー側で問題が発生しており正常にレスポンスを返さない状態である「500 Internal Server Error」などがあります。

2-5.ステートレスなサーバー

ステートレスとは状態が無いという意味であり、サーバー側が利用者とのセッションを管理しないことを指します。反対にCookieを利用したり、ユーザー情報をDBに保存したりすることで利用者毎にサービスを提供するアプリはステートフルと言います。

APIを公開しステートレスとすることで、利用者はセッションを持たず常にリソースに対してアクセス可能な状態になります。そのため、アクセスするサーバーが増えてもそのままのリクエストでリソースを操作ができ、利用者管理分の負荷を減らすことができます。ステートレスは大規模なアプリケーション等の、スケールアウトに向いています。

2-6.関連リソースへのリンク(接続性)

リソースには関連する他のリソースへのリンクを含めることができます。リソース同士が適切に接続されるよう設計することで、Webアプリのようにリンクを辿るだけで別のリソースにアクセスでき、使いやすいAPIを提供できます。


3.REST APIのメリット


WebサービスにAPIを採用して、RESTに従った設計とすることには通常のWebアプリと比べて以下のようなメリットがあります。

  1. 会社や組織を超えた共通の枠組みとすることで、利用者・開発者共に理解しやすい・使いやすいサービスとなる
  2. HTTP標準のメソッド(GET/POST等)を利用することで、一貫性がありシンプルなプログラム開発とできる
  3. セッション等サーバー/クライアント間でステートレスとなるため、負荷に応じたスケーラビリティが向上する


4.Spring BootとREST API


近年は仮想環境技術やインフラのクラウド化に伴ってマイクロサービス(またはマイクロサービスアーキテクチャ)という開発手法が広まってきています。大勢のユーザーに対して多くの機能を一つのアプリケーション・データベース等で提供しようとする、モノシリックなサービスに対して、マイクロサービスとは複数のサービスを組み合わせてアプリケーションを構築する開発手法です。

このマイクロサービスでは開発した複数のサービス間の連携はAPIを利用して行われることが多く、サーバーサイドのフレームワークについても外部からリクエストを受けリソースを共有できるAPIを実装するための拡張性が求められています。

Spring Frameworkにもマイクロサービス化・API化をサポートするためのライブラリ・フレームワークが存在し、Spring BootはREST APIを実装する際のデファクトスタンダードになっています。Spring Bootの特徴として、JavaVM上で直接稼働し単体で動作するため、docker等のコンテナ技術やAPIを使ったマイクロサービスと相性が良いです。 また、複雑化したSpringの初期設定や環境構築がパッケージ化されているため開発工数・習得難易度を減らせることもメリットとして挙げられます。

Spring Frameworkとは?


5.Spring BootでREST APIを作成する


では実際にREST APIがどのように作られ動作するか、簡単に追ってみましょう。Spring Project公式のSpring Boot Rest APIのサンプルコード(https://spring.pleiades.io/guides/gs/rest-service/)を見てみましょう。

■仕様

・リクエスト

 http://localhost:8080/greetingという開発環境URLへHTTP GET リクエストする場合を想定します。

・レスポンス

 {“id”:1,”content”:”Hello, World!”}という挨拶をjson形式で返却します。

■セットアップ

・Spring Initializrを使用して必要な依存関係を持つ新しいプロジェクトを作成します。

・設定ファイルは省略しますが、Mavenであればpom.xml、Gradleであればbuild.gradle がリンクから確認できます。

■リソースクラス

・リソースとするGreeting.javaはコンストラクタやアクセサリ等を持たせます。

■コントローラークラス

・HTTP リクエストは通常コントローラーで処理されます。

・@GetMapping により…/greeting への HTTP GET リクエストが greeting() メソッドを呼び出します。

・デフォルトではWorld、リクエストに”name”を渡すとその値がHelloの後に足されます。

・レスポンスはjsonで返却する必要がありますが、Spring のHTTP メッセージコンバーターのサポートにより、返却されるGreeting インスタンスが JSON に変換されます。

■実行

・コマンドラインから Gradle または Maven を使用して、JAR ファイルを実行します。

・サービスが起動したら、http://localhost:8080/greeting?name=Userにアクセスすると、{“id”:2,”content”:”Hello, User!”}と表示されるはずです。

これでSpring bootでシンプルなREST APIを実装することができました。コードを見てきたようにリソースもコントローラーも通常のWebアプリと大きく変わりません。Spring boot REST APIではアプリ内部(view等)へインスタンスを返すか、外部APIとしてjson形式で返すかはフレームワーク内での明示や設定を変えるだけで簡単に実装できます。


6.Spring Frameworkを利用する際に必要なスキル


ここまでWebAPIやRESTに関して紹介してきましたが、実際にSpringを使用してREST APIを開発する場合は、他のスキルや知識も必要となります。チーム開発になれば役割分担もあるので、全てを自分でできなくても良い場合はありますが、最低限抑えておきたいものを以下紹介します。

6-1.Java

Spring Framworkはプログラミング言語にJavaが使用されています。基本的な変数の扱いやループ文等基礎的な構文から複雑なアルゴリズムやロジックを記載するまで、プログラミングを読み書きして、状況に応じたカスタマイズを行えることが、まず必要となるスキルでしょう。

6-2.Webサーバー・DBの知識

Web APIもWebアプリ同様に単体で機能しません。ウェブブラウザからのアクセスに対して、HTML等を提供するWebサーバーやWebAPIに関わるリソースデータを保存したり高速で検索したりできるようにするデータベースも関わってきます。これらのミドルウェアとWeb APIを連携させる設定や仕組みについてもある程度通ずることが必要になってきます。

6-3.バージョン管理ツール

Gitが有名ですがSubversionやMercurial等、ソースコードの変更履歴を記録してバージョンを管理するためのツールが開発では使用されます。もしこれらを使わないまま、複数のメンバーが無秩序にソースコードやファイルに対して変更を行っていくと、誰がいつ何の変更を行なったか、どのファイルが最新なのかといった混乱が即座に発生するでしょう。

バージョン管理ツールを使用することで、変更履歴をすべて記録できる・以前の状態に戻せる・デグレードの発生を防止するという近年では必要不可欠な恩恵を享受できます。開発現場では絶対と言っていいほど使用されていますので、最低限の使い方は学んでおくと良いでしょう。


この記事をシェア