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

未来の webに欠かせない『 RESTful webサービス』について、「PHPカンファレンス2016 東京」に登壇し話をさせていただきました。

今回の記事は PHP カンファレンスで紹介した内容の『 RESTful web サービス 』についてと、構築方法、利用法の具体的な紹介です。

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

 

「Webサイトからお問い合わせが来ない…」とお悩みの方必見!
当サイトのノウハウを詰め込んだ『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
次へ
前へ