RESTful webサービスを構築しよう

未来のwebに欠かせないRESTful webサービスについて、「PHPカンファレンス2016 東京」に登壇し話をさせていただきました。
今回の記事はPHPカンファレンスで紹介した内容の「RESTful webサービス」についてと、構築方法、利用法の具体的な紹介です。

当日使用したスライドは下記を参照ください。

 

RESTful webサービスとは

 

RESTful webサービスとは、REST(Representational State Transfer)によって定義されたアーキテクチャーの原則に従ってリソース情報を取得、作成、修正、削除が行えるAPIインターフェースです。

リソースへのアクセスはリソース固有のURIにHTTPメソッドを明示的にアクセスします。

簡単にいうと、リソースを必要するwebサイトや、デバイスなどが、RESTful webサービスに、データをくださいと要求すると、RESTful webサービスが、jsonや、xmlデータを返答するサービスです。

 

注目を集めるREST

RESTという概念は古くから存在しますが、昨今なぜ注目を浴びるのでしょうか。
それは、増え続けるwebサイトや、増え続けるマルチデバイスに効率よくリソース(コンテンツ)を配信することができるからです。

下図のように、1社で複数のサイトを保有し、さらにサイトごとに入っているシステムの違いや、様々なデバイスでの利用を考えると、これまでのwebサイトの作り方では非効率となってきました。

そこでリソース(コンテンツ)配信用のサーバーを用意し、各webサイトやデバイスのアプリケーションからデータを取得しにくる、webシステム(RESTful webサービス)が求められています。

 

RESTful webサービスの構築

 

今回RESTful webサービスの構築を下記プロダクトを使い行います。

記事詳細:Drupal8 REST Service
記事一覧:Drupal8 Views
サイト内検索:Apache Solr

 

Drupal8

まずRESTful webサービスで配信する、リソースの管理ですがDrupal8を使います。
Drupal8は標準でRESTの機能を搭載しており、URIをコールする際にメソッドを明示的にし利用します。

リソース取得 : GET メソッド
新規作成 : POST メソッド
リソース編集 : PATCHメソッド
削除:DELETEメソッド

※.
一般的なRESTful webサービスは、リソース編集の場合PUTメソッドが使われることもあります。
PUTなのか、PATCHなのかについてはMdN Designに記事を連載する予定です。どうぞお楽しみに。

 

 

Drupal8インストール / 設定

  1. Drupal公式サイトより、Drupal8 Coreファイルをダウンロードし、webサーバーにインストールしてください。

    https://www.drupal.org/download
    インストール設定手順は下記サイトを参照ください。(Drupal8のインストール
     

  2. REST UIモジュールをインストールします。

    https://www.drupal.org/project/restui

    ダウンロードし解凍したたフォルダを「l/modules」にアップし、REST UIモジュールを有効にします。
     

  3. 管理画面「環境設定 > REST」を開き、「RESOURCE NAME:コンテンツ」の編集をクリックします。

    RESTUI画面で、受け取るメソッドと、認証方法を選択します。
    今回はCSRF Tokenを使用して認証を行いますので、「cokie」にチェックを付けてください。
    メソッドは下記の通りです。

    GET:記事取得
    POST:記事新規作成
    PATCH:記事編集
    DELETE:記事削除

     

  4. アクセス可能な権限を設定します。
    管理画面「ユーザー > 権限」をクリックし、権限設定をしてください。

 

RESTful webサービスを使う

 

上記設定作業により、記事取得や、新規作成のRESTful webサービスが構築できたので、実際に使い方を見てみましょう。

 

GET (記事取得)

項目
リクエストURI  http://example.com/node/{NODE_ID}
リターンコード 200 OK
クエリ _format={Format Type}
メソッド GET

リクエストサンプル ) http://example.com/node/12?_format=json

 

POST (新規作成)

POST、PATCH、DELETEは、認証が必要です。CMSにログインしていいない場合は「Login」を行い、CSRF Tokenを取得してください。
 

LOGIN:

項目
URI http://example.com/user/login
メソッド POST
HEADER
Content-type: application
x-www-form-urlencoded
BODY name=myuser&pass=mypassword&form_id=user_login_form
リターンコード 200 OK :認証失敗 、303 See Other:認証成功

 

LOG OUT:

項目
URI http://example.com/user/logout
メソッド GET
HEADER
Content-type
text/html
リターンコード 200 OK

 

CSRF Token取得

項目
URI http://example.com/rest/session/token
メソッド GET

POST、PATCH、DELETEで使うCSRF Tokenを取得することができます。

POST(JSON):

項目
URI http://example.com/entity/node
メソッド POST
(HEADER)
 Content-type
application/json
(HEADER)
 X-CSRF-Token
上記で取得したCSRF Token
リターンコード 201 Created
BODY

{
  "type":[{"target_id":"article"}],
  "title":[{"value":"ノードタイトル"}],
  "body":[{"value":"Bodyフィールド"}]
}
 

POST(HAL_JSON):

項目
URI http://example.com/entity/node
メソッド POST
(HEADER)
 Content-type
application/hal+json
(HEADER)
 X-CSRF-Token
上記で取得したCSRF Token
リターンコード 201 Created
BODY

{
  "_links": {"type": {"href": "http://example.com/rest/type/node/article"}},
  "type":[{"target_id": "article"}],
  "title": {"value": "ノードタイトル"}
}

 

PATCH (編集)

項目
URI  http://example.com/node/{NODE_ID}
メソッド PATCH
(HEADER)
 Content-type
application/json
(HEADER)
 X-CSRF-Token
上記で取得したCSRF Token
リターンコード 204 No content
BODY

{
 "nid":[{"value":"123456"}],
 "type":[{"target_id":"article"}],
 "title":[{"value":"リーソース編集"}]
}
 

 

DELETE (削除)

項目
URI  http://example.com/node/{NODE_ID}
メソッド DELETE
(HEADER)
 X-CSRF-Token
上記で取得したCSRF Token
リターンコード 204 No content
BODY

{
 "type":[{"target_id":"article"}]
}

 

以上でDrupal8を使った、RESTful webサービスの記事取得、作成、編集、削除の方法でした。
次回は、記事一覧、記事検索用のインターフェースを実装します。

今回の記事と合わせましてMdN DesingにもRESTful webサービスで使われるメッソドについて、記事を執筆中ですので、どうぞお楽しみに。

 

参考サイト

JavaScript and Drupal 8 RESTful Web Services

 

関連タグ: 

この記事をシェアする:

Author
この記事を書いた人:阿部 正幸

KDDIウェブコミュニケーションズ
クラウドホスティング事業本部 エバンジェリスト

CPIスタッフブログ編集長。ACE01,SmartReleaseをリリース後、現職の「エバンジェリスト」として、web制作に関する様々なイベントに登場

Line@登録よろしくお願いします

Web制作に関する情報や、CPIノベルティのプレゼント、サーバーの無償提供などを定期的に発信しています。
ぜひ、登録ください。