Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
未来のwebに欠かせないREST APIを
Apache Solr + Drupalで実装しよう
KDDIウェブコミュニケーションズ
阿部 正幸
ACE01 / SmartRelease プロダクトマネージャー
CPI エバンジェリスト 統括
KDDIウェブ 公認 CPI スタッフブログ 編集長
TechAcademy講師
HTML5 Fun 理事
ANNAI株式会社 社外取締役(CMO...
Venture
Since
1998
Web
Service
Hosting
1. コンテンツ中心設計(personalized)
2. コンテンツの再利用
3. 柔軟なシステム
4. APIを通じてコンテンツの配信(REST)
5. ビジネスニーズ(UX、MA)
CMSは インタラクティブ と
マルチチャネルプラットフォーム の
ための API に急速に進化
注目が集まるREST API
なぜ必要なのか
CMS
これまでのCMS
IoT
iPhone App
Signage
Android App
a Company
Product B
Recruit Event
IR
Product A
Corporate
Campaing
Blog
増え続けるサイトとシステム
Prodcut
CMS
RESTサーバー
Event
Blog
Corporate
Application
Other System
担当者
これからのCMS
たとえば
- KWCの場合 -
情報発信しているメディア
情報発信しているメディア
まだまだある ……
たとえば
- CPIのイベントを掲載する -
私 : CPIスタッフブログに掲載
広報 : コーポレートサイトに掲載
コンパネ担当 : コンパネに表示
メルマガ担当 : メルマガ発行
メルマガ担当 : Web閲覧用メルマガ作成
デザイン部 : ...
たとえば
- CPIのイベントを掲載する -
私 : CPIスタッフブログに掲載
広報 : コーポレートサイトに掲載
コンパネ担当 : コンパネに表示
メルマガ担当 : メルマガ発行
メルマガ担当 : Web閲覧用メルマガ作成
デザイン部 : ...
KWC
RESTサーバー
メルマガ
CPI ブログ
コンパネ
Other Application
Other System
担当者
これからのCMS
Internet
閲覧者
webサーバー
(AWS)
Drupal8
Views
Drupal8
REST Service
検索
記事
記事一覧
DB
S2Robot
サイトクロール
インデックス登録
Internet
チャットシステム MAツール Other APICRMSMS
web hook
何かをフックに
他システム連動
webサーバー
- AWS EC2 -
webサーバー構築手順
(手順1)
yumで適当にLAMP 構築
$ sudo yum install -y httpd24 php56
mysql55-server php56-mysqlnd
php56-opcache
RESTサーバー
- Drupal8インストール -
RESTサーバー構築手順
(手順1)
Drupal8 Coreダウンロードし解凍
https://www.drupal.org/project/drupal
$ crul –O http:// URL /drupal.tar.gz
$ tar ...
RESTサーバー構築手順
(手順2)
Drupal8用Database作成
# MySQL起動
$ sudo service mysqld start
$ sudo chkconfig mysqld on
# MySQLログイン
$ mysql...
RESTサーバー構築手順
(手順3)
PHPモジュール追加
# gd
# yum list | grep gd でリストを出す
$ sudo yum install php56-gd.x86_64
# mbstring
# yum list |...
RESTサーバー構築手順
(手順4)
.htaccess許可設定
# htaccess許可
$ sudo vi /etc/httpd/conf/httpd.conf
<Directory "/var/www">
AllowOverride Al...
RESTサーバー構築手順
(手順5)
http://example.com/ にアクセスし、
Drupal8インストール(よしなに)
RESTサーバー
- Drupal8設定(記事単体) -
Drupal8 REST API 機能
- 認証不要
GET Request (記事取得)
- CSRF Token ユーザー認証必須
POST Request (記事新規作成)
DELETE Request (記事削除)
PATCH Requ...
Drupal8 REST 設定
(手順1)
REST UIモジュールをインストール
https://www.drupal.org/project/restui
Drupal8 REST 設定
(手順2)
「環境設定 > REST」から使用するMethodや、Data Type
を選択
Drupal8 REST 設定
(手順3)
「ユーザー > 権限」からアクセスできる権限を指定
RESTサーバー
- GET Request -
Get Request
https://example.com/node/<nid>?_format=json
Request
200 OK
Response
RESTサーバー
- POST, DELETE, PATCH Request -
Login 認証
https://example.com/user/login
Request (metod : post)
303 See Other
Response
application/x-www-form-urlencoded
Co...
CSRF Token取得
https://example.com/rest/session/token
Request (metod : get)
200 OK
Response
POST Request (記事新規作成)
https://example.com/entity/none
Request (metod : post)
201 Created
Response
application/hal+json
Con...
POST Request (記事新規作成)
{
"_links": {
"type": {
"href": "https://example.com/rest/type/node/article"
}
},
"title": {
"value"...
POST Request (記事新規作成)
PATCH / DELETE Request
https://example.com/node/node_id
Request (metod : PATCH)
204 No Contet
Response
application/hal+jso...
{
"_links": {
"type": {
"href": "http://examle.com/rest/type/node/article"
}},
"title": [{
"value": "My page created via R...
PATCH / DELETE Request
RESTサーバー
- Drupal8設定(記事一覧) -
サイト構築 > ビューズ > ビューを追加
「REST出力を提供する」にチェックをし「保存」
REST 記事一覧
検索用REST
- FESS Server -
Internet
閲覧者
webサーバー
(AWS)
Drupal8
Views
Drupal8
REST Service
検索
記事
記事一覧
DB
S2Robot
サイトクロール
インデックス登録
Internet
閲覧者
Drupal8
Views
Drupal8
REST Service
記事
記事一覧FESS
検索
DB
S2Robot
サイトクロール
インデックス登録
webサーバー
(AWS)
Fess10構成
Fess9構成
画像元:http://fess.codelibs.org/ja/articles/article-1.html
FESS(検索エンジン)
10系
Elasticsearch
9系
Apache Solr
※ 大規模向けに対応
クローラー、O/Rマッパー、シノニム、
サジェストなど検索に必要な
コンポーネントを
オールインワンパッケージで提供
Fess9.4インストール
- java 削除
$ sudo rpm -qa | grep java
$ sudo rpm -e java-1.7.0-openjdk-1.7.0.101-2.6.6.1.67.amzn1.x86_64
- JD...
Fess9.4インストール
- Fess起動
# /etc/fess-server-9.4.2/bin/startup.sh
- FESSのProxy設定
$ sudo vi /etc/httpd/conf/httpd.conf
Include...
http://example.com/fess/admin
Fess管理画面
Fess10 インストール
- java 削除
$ sudo rpm -qa | grep java
$ sudo rpm -e java-1.7.0-openjdk-1.7.0.101-2.6.6.1.67.amzn1.x86_64
- JD...
Fess10 インストール
- FESS起動
# bin/fess
- FESS終了
$ ps aux | grep fess
$ sudo kill -9 [pid]
Java ヒープ・メモリ
適宜JAVAヒープ・メモリを調整
Javaヒープ・メモリ:2GB
$ sudo vim bin/fess.in.sh
-----------------------------------------------
if...
Fess10設定
サジェスト
http://example.com/suggest?query=fess&num10
検索
http://example.com/json/?type=search&q=drupal&num10
FESS10系 REST API
...
他システム連携
- Web hook -
Internet
チャットシステム MAツール Other APICRMSMS
web hook
何かをフックに
他システム連動
(例)Web hook to SMS
web hook
投稿を検知
APIをキック
Twilio API
APIからSMS
送信
記事を投稿
CMS
Drupla Rules moduleインストール
https://www.drupal.org/project/rules
Web hook
SMS送信用プログラム (Twilio)
DEMO
さいごに
REST化メリット
コンテツを効率よく配信できる
システムとデザインの分離
他システムとの連携が容易になる
CMS + REST
各CMSでREST対応モジュールが出ているので
後からREST化することが可能
WP : WP REST...
ありがとうございました
ID:chiyo.abe
阿部 正幸
cpi-line
未来のwebに欠かせないREST APIをApache Solr + Drupal8で実装しよう@PHPカンファレンス2016 東京
未来のwebに欠かせないREST APIをApache Solr + Drupal8で実装しよう@PHPカンファレンス2016 東京
未来のwebに欠かせないREST APIをApache Solr + Drupal8で実装しよう@PHPカンファレンス2016 東京
未来のwebに欠かせないREST APIをApache Solr + Drupal8で実装しよう@PHPカンファレンス2016 東京
未来のwebに欠かせないREST APIをApache Solr + Drupal8で実装しよう@PHPカンファレンス2016 東京
未来のwebに欠かせないREST APIをApache Solr + Drupal8で実装しよう@PHPカンファレンス2016 東京
未来のwebに欠かせないREST APIをApache Solr + Drupal8で実装しよう@PHPカンファレンス2016 東京
未来のwebに欠かせないREST APIをApache Solr + Drupal8で実装しよう@PHPカンファレンス2016 東京
Upcoming SlideShare
Loading in …5
×

未来のwebに欠かせないREST APIをApache Solr + Drupal8で実装しよう@PHPカンファレンス2016 東京

5,599 views

Published on

PHPカンファレンス2016 東京で登壇時のスライドです。

Published in: Technology
  • Be the first to comment

未来のwebに欠かせないREST APIをApache Solr + Drupal8で実装しよう@PHPカンファレンス2016 東京

  1. 1. 未来のwebに欠かせないREST APIを Apache Solr + Drupalで実装しよう KDDIウェブコミュニケーションズ 阿部 正幸
  2. 2. ACE01 / SmartRelease プロダクトマネージャー CPI エバンジェリスト 統括 KDDIウェブ 公認 CPI スタッフブログ 編集長 TechAcademy講師 HTML5 Fun 理事 ANNAI株式会社 社外取締役(CMO) 阿部 正幸(あべ まさゆき) KDDIウェブコミュニケーションズ
  3. 3. Venture Since 1998 Web Service Hosting
  4. 4. 1. コンテンツ中心設計(personalized) 2. コンテンツの再利用 3. 柔軟なシステム 4. APIを通じてコンテンツの配信(REST) 5. ビジネスニーズ(UX、MA)
  5. 5. CMSは インタラクティブ と マルチチャネルプラットフォーム の ための API に急速に進化
  6. 6. 注目が集まるREST API なぜ必要なのか
  7. 7. CMS これまでのCMS
  8. 8. IoT iPhone App Signage Android App a Company Product B Recruit Event IR Product A Corporate Campaing Blog 増え続けるサイトとシステム
  9. 9. Prodcut CMS RESTサーバー Event Blog Corporate Application Other System 担当者 これからのCMS
  10. 10. たとえば - KWCの場合 -
  11. 11. 情報発信しているメディア
  12. 12. 情報発信しているメディア まだまだある ……
  13. 13. たとえば - CPIのイベントを掲載する - 私 : CPIスタッフブログに掲載 広報 : コーポレートサイトに掲載 コンパネ担当 : コンパネに表示 メルマガ担当 : メルマガ発行 メルマガ担当 : Web閲覧用メルマガ作成 デザイン部 : CPIサイトに掲載
  14. 14. たとえば - CPIのイベントを掲載する - 私 : CPIスタッフブログに掲載 広報 : コーポレートサイトに掲載 コンパネ担当 : コンパネに表示 メルマガ担当 : メルマガ発行 メルマガ担当 : Web閲覧用メルマガ作成 デザイン部 : CPIサイトに掲載多くの工数がかかってしまう
  15. 15. KWC RESTサーバー メルマガ CPI ブログ コンパネ Other Application Other System 担当者 これからのCMS
  16. 16. Internet 閲覧者 webサーバー (AWS) Drupal8 Views Drupal8 REST Service 検索 記事 記事一覧 DB S2Robot サイトクロール インデックス登録
  17. 17. Internet チャットシステム MAツール Other APICRMSMS web hook 何かをフックに 他システム連動
  18. 18. webサーバー - AWS EC2 -
  19. 19. webサーバー構築手順 (手順1) yumで適当にLAMP 構築 $ sudo yum install -y httpd24 php56 mysql55-server php56-mysqlnd php56-opcache
  20. 20. RESTサーバー - Drupal8インストール -
  21. 21. RESTサーバー構築手順 (手順1) Drupal8 Coreダウンロードし解凍 https://www.drupal.org/project/drupal $ crul –O http:// URL /drupal.tar.gz $ tar –xfv drupal.tar.gz
  22. 22. RESTサーバー構築手順 (手順2) Drupal8用Database作成 # MySQL起動 $ sudo service mysqld start $ sudo chkconfig mysqld on # MySQLログイン $ mysql -u root mysql > CREATE DATABASE drupal_db DEFAULT CHARACTER SET utf8 COLLATE utf8mb4_general_ci;
  23. 23. RESTサーバー構築手順 (手順3) PHPモジュール追加 # gd # yum list | grep gd でリストを出す $ sudo yum install php56-gd.x86_64 # mbstring # yum list | grep mgstring でリストを出す $ sudo yum install php56-mbstring.x86_64
  24. 24. RESTサーバー構築手順 (手順4) .htaccess許可設定 # htaccess許可 $ sudo vi /etc/httpd/conf/httpd.conf <Directory "/var/www"> AllowOverride All Require all granted </Directory> $ sudo service httpd restart
  25. 25. RESTサーバー構築手順 (手順5) http://example.com/ にアクセスし、 Drupal8インストール(よしなに)
  26. 26. RESTサーバー - Drupal8設定(記事単体) -
  27. 27. Drupal8 REST API 機能 - 認証不要 GET Request (記事取得) - CSRF Token ユーザー認証必須 POST Request (記事新規作成) DELETE Request (記事削除) PATCH Request (記事更新) ※ リクエスト方法は後ほど
  28. 28. Drupal8 REST 設定 (手順1) REST UIモジュールをインストール https://www.drupal.org/project/restui
  29. 29. Drupal8 REST 設定 (手順2) 「環境設定 > REST」から使用するMethodや、Data Type を選択
  30. 30. Drupal8 REST 設定 (手順3) 「ユーザー > 権限」からアクセスできる権限を指定
  31. 31. RESTサーバー - GET Request -
  32. 32. Get Request https://example.com/node/<nid>?_format=json Request 200 OK Response
  33. 33. RESTサーバー - POST, DELETE, PATCH Request -
  34. 34. Login 認証 https://example.com/user/login Request (metod : post) 303 See Other Response application/x-www-form-urlencoded Content-Type name=USERID&pass=PASSWORD&form_id=user_login_form Body
  35. 35. CSRF Token取得 https://example.com/rest/session/token Request (metod : get) 200 OK Response
  36. 36. POST Request (記事新規作成) https://example.com/entity/none Request (metod : post) 201 Created Response application/hal+json Content-Type { Get from /rest/session/token } X-CSRF-Token
  37. 37. POST Request (記事新規作成) { "_links": { "type": { "href": "https://example.com/rest/type/node/article" } }, "title": { "value": "Test Article" }, "type": { "target_id": "article" } } Body
  38. 38. POST Request (記事新規作成)
  39. 39. PATCH / DELETE Request https://example.com/node/node_id Request (metod : PATCH) 204 No Contet Response application/hal+json Content-Type { Get from /rest/session/token } X-CSRF-Token
  40. 40. { "_links": { "type": { "href": "http://examle.com/rest/type/node/article" }}, "title": [{ "value": "My page created via REST (Updated)" }], "body": [{ "value": "This updated too" }], "type": [{ "target_id": "article" }] } Body PATCH / DELETE Request
  41. 41. PATCH / DELETE Request
  42. 42. RESTサーバー - Drupal8設定(記事一覧) -
  43. 43. サイト構築 > ビューズ > ビューを追加 「REST出力を提供する」にチェックをし「保存」 REST 記事一覧
  44. 44. 検索用REST - FESS Server -
  45. 45. Internet 閲覧者 webサーバー (AWS) Drupal8 Views Drupal8 REST Service 検索 記事 記事一覧 DB S2Robot サイトクロール インデックス登録
  46. 46. Internet 閲覧者 Drupal8 Views Drupal8 REST Service 記事 記事一覧FESS 検索 DB S2Robot サイトクロール インデックス登録 webサーバー (AWS)
  47. 47. Fess10構成 Fess9構成 画像元:http://fess.codelibs.org/ja/articles/article-1.html
  48. 48. FESS(検索エンジン) 10系 Elasticsearch 9系 Apache Solr ※ 大規模向けに対応
  49. 49. クローラー、O/Rマッパー、シノニム、 サジェストなど検索に必要な コンポーネントを オールインワンパッケージで提供
  50. 50. Fess9.4インストール - java 削除 $ sudo rpm -qa | grep java $ sudo rpm -e java-1.7.0-openjdk-1.7.0.101-2.6.6.1.67.amzn1.x86_64 - JDKインストール $ sudo yum install java-1.8.0-openjdk.x86_64 $ sudo yum install java-1.8.0-openjdk-devel.x86_64 - Fessインストール $ sudo wget https://github.com/codelibs/fess/archive/fess-9.4.2.tar.gz $ sudo tar xvzf fess.tar.gz $ sudo mv fess-server-9.4.2 /etc $ sudo cd /etc/fess-server-9.4.2 $ sudo chmod +x bin/*.sh
  51. 51. Fess9.4インストール - Fess起動 # /etc/fess-server-9.4.2/bin/startup.sh - FESSのProxy設定 $ sudo vi /etc/httpd/conf/httpd.conf Include /etc/httpd/conf.d/httpd-proxy.conf <- 追加 $ sudo vi httpd-proxy.conf ProxyPass /fess/ ajp://localhost:8009/fess/ <- 追加 - Apache再起動 # service httpd restart
  52. 52. http://example.com/fess/admin Fess管理画面
  53. 53. Fess10 インストール - java 削除 $ sudo rpm -qa | grep java $ sudo rpm -e java-1.7.0-openjdk-1.7.0.101-2.6.6.1.67.amzn1.x86_64 - JDKインストール $ sudo yum install java-1.8.0-openjdk.x86_64 $ sudo yum install java-1.8.0-openjdk-devel.x86_64 - Fessダウンロード https://github.com/codelibs/fess/releases - Fessダウンロード $ unzip /etc/fess-10.2.1.zip
  54. 54. Fess10 インストール - FESS起動 # bin/fess - FESS終了 $ ps aux | grep fess $ sudo kill -9 [pid]
  55. 55. Java ヒープ・メモリ 適宜JAVAヒープ・メモリを調整 Javaヒープ・メモリ:2GB $ sudo vim bin/fess.in.sh ----------------------------------------------- if [ "x$FESS_MIN_MEM" = "x" ]; then FESS_MIN_MEM=256m fi if [ "x$FESS_MAX_MEM" = "x" ]; then FESS_MAX_MEM=2g fi
  56. 56. Fess10設定
  57. 57. サジェスト http://example.com/suggest?query=fess&num10 検索 http://example.com/json/?type=search&q=drupal&num10 FESS10系 REST API q :検索語(URLエンコード) start :開始件数位置 num :表示件数 fields.label :ラベル値 参考:http://fess.codelibs.org/ja/10.2/api/api-search.html
  58. 58. 他システム連携 - Web hook -
  59. 59. Internet チャットシステム MAツール Other APICRMSMS web hook 何かをフックに 他システム連動
  60. 60. (例)Web hook to SMS web hook 投稿を検知 APIをキック Twilio API APIからSMS 送信 記事を投稿 CMS
  61. 61. Drupla Rules moduleインストール https://www.drupal.org/project/rules Web hook
  62. 62. SMS送信用プログラム (Twilio)
  63. 63. DEMO
  64. 64. さいごに REST化メリット コンテツを効率よく配信できる システムとデザインの分離 他システムとの連携が容易になる CMS + REST 各CMSでREST対応モジュールが出ているので 後からREST化することが可能 WP : WP REST API MT : Data API
  65. 65. ありがとうございました ID:chiyo.abe 阿部 正幸 cpi-line

×