未来の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インストール / 設定
- 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 | { |
以上でDrupal8を使った、RESTful webサービスの記事取得、作成、編集、削除の方法でした。
次回は、記事一覧、記事検索用のインターフェースを実装します。
今回の記事と合わせましてMdN DesingにもRESTful webサービスで使われるメッソドについて、記事を執筆中ですので、どうぞお楽しみに。
参考サイト
JavaScript and Drupal 8 RESTful Web Services