RESTful web サービスを構築しよう!Drupal8 を使った方法を解説

未来の 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 (​​Representational State Transfer) という概念は古くから存在しますが、昨今なぜ注目を浴びるのでしょうか。 それは、増え続ける web サイトや、増え続けるマルチデバイスに効率よくリソース(コンテンツ)を配信することができるからです。 下図のように、1社で複数のサイトを保有し、さらにサイトごとに入っているシステムの違いや、様々なデバイスでの利用を考えると、これまでの web サイトの作り方では非効率となってきました。

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

 

Drupal8 を使った RESTful web サービスの構築

 

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

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

 

Drupal8

まず RESTful webサービスで配信する、リソースの管理ですが Drupal 8 を使います。
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"}]
}

 

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

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

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

 

参考サイト

JavaScript and Drupal 8 RESTful Web Services

 

関連タグ:

CPIの最新情報をTwitterでチェックできます!
@cpiadjp
次へ
前へ