未来の 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インストール / 設定
- Drupal公式サイトより、Drupal8 Coreファイルをダウンロードし、webサーバーにインストールしてください。
https://www.drupal.org/download
インストール設定手順は下記サイトを参照ください。(Drupal8のインストール)
- REST UIモジュールをインストールします。
https://www.drupal.org/project/restui
ダウンロードし解凍したたフォルダを「l/modules」にアップし、REST UIモジュールを有効にします。
- 管理画面「環境設定 > REST」を開き、「RESOURCE NAME:コンテンツ」の編集をクリックします。
RESTUI画面で、受け取るメソッドと、認証方法を選択します。
今回はCSRF Tokenを使用して認証を行いますので、「cokie」にチェックを付けてください。
メソッドは下記の通りです。 - アクセス可能な権限を設定します。
管理画面「ユーザー > 権限」をクリックし、権限設定をしてください。
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 |
{ |
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 |
{ |
PATCH (編集)
項目 | 値 |
---|---|
URI | http://example.com/node/{NODE_ID} |
メソッド | PATCH |
(HEADER) Content-type |
application/json |
(HEADER) X-CSRF-Token |
上記で取得したCSRF Token |
リターンコード | 204 No content |
BODY |
{ |
DELETE (削除)
項目 | 値 |
---|---|
URI | http://example.com/node/{NODE_ID} |
メソッド | DELETE |
(HEADER) X-CSRF-Token |
上記で取得したCSRF Token |
リターンコード | 204 No content |
BODY |
{ |
RESTful web サービスを構築してみよう!
以上で Drupal 8 を使った、RESTful web サービスの記事取得、作成、編集、削除の方法でした。
次回は、記事一覧、記事検索用のインターフェースを実装します。
今回の記事と合わせまして MdN DesingにもRESTful web サービスで使われるメソッドについて、記事を執筆中ですので、どうぞお楽しみに。
参考サイト
JavaScript and Drupal 8 RESTful Web Services