狠狠撸

狠狠撸Share a Scribd company logo
A-2
REST の総復習
株式会社エフ マネージャー
御代 政彦(みよ まさひこ)
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
今回のセッションに関するお問い合わせは、↓こちらまで↓
御代 政彦(みよ まさひこ)
2011年12月からIBM Champion for ICSをやってます
Twitter:@guylocke
Facebook:guylocke34
ブログ:http://guylocke.blogspot.jp
- 2 -
自己紹介
のおつ 検索
株式会社エフ
ef-info@effect-force.co.jp
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
アジェンダ
? RESTについて
? RESTとは?
? JSON/JSONPとは?
? DominoにおけるREST/JSON
? 設定方法のおさらい
? 実際のデータを見てみよう
? XPagesアプリを作ってみた!
? JSONPで返してくる場合
? JSONで返してくる場合
? OnTime Open APIを使った場合
? アプリのソースを見てみよう!
? 応用を考えよう!
? Bluemixのサービスとの連携
? Notes DBのデータを外部に公開
- 3 -
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
- 4 -
RESTについて
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
RESTについて
? RESTとは?
? HTTP ベースの軽量なWeb API を提供
? データにはXML やJSON などの形式を利?
? HTTP のGET/POST/PUT/DELETE メソッドでCRUD 操作を実現
- 5 -
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
RESTについて
? RESTとは?
? HTTP ベースの軽量なWeb API を提供
? データにはXML やJSON などの形式を利?
? HTTP のGET/POST/PUT/DELETE メソッドでCRUD 操作を実現
- 6 -
HTTPで特定のURLにアクセスすると、
JSONのデータが返ってくるよ!
要するに???
ということです!
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
RESTについて
? JSON/JSONPとは?
? JavaScriptにおけるオブジェクトのように記述できる軽量なデータ
フォーマット
? JSONPはJSONを関数呼び出しの形式にしたもの
? クロスドメインでの利?をしやすくするため
- 7 -
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
RESTについて
? JSON/JSONPとは?
? JavaScriptにおけるオブジェクトのように記述できる軽量なデータ
フォーマット
? JSONPはJSONを関数呼び出しの形式にしたもの
? クロスドメインでの利?をしやすくするため
- 8 -
XPagesで利用するのに適したデータ形式
要するに???
ということです!
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
- 9 -
Dominoにおける
REST/JSON
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
DominoにおけるREST/JSON
? 設定方法のおさらい
1. Dominoディレクトリのサーバ文書内にある「Domino アクセス
サービス」の「有効なサービス」にサービス名を設定する。
? 2015年11月時点で設定可能なのは「Data, TravelerAdmin, Calendar,
Mail, FreeBusy」
2. サーバ文書を保存後、
Dominoサーバコンソールで
tell http refresh
と入力!
- 10 -
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
DominoにおけるREST/JSON
? 設定方法のおさらい
3. Notes DBの「データベースプロパティ」の[詳細]タブ(一番右)
を開く
4. 「IBM Domino データサービスを許可」の
値を「ビューと文書」に変更する
- 11 -
ODSのバージョンは問わない!
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
DominoにおけるREST/JSON
? 設定方法のおさらい
5. Domino Designerでビュープロパティの[詳細]タブ(右か
ら二番目)を開き、「IBM Domino データサービスの操
作を許可」にチェックをつける
6. ビューを保存!
- 12 -
RESTアクセスを許可していないビューは
「HTTP403」エラーになる
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
DominoにおけるREST/JSON
? 実際のデータを見てみよう
1. Dominoサーバーで許可されているData Serviceの種類を返す
http://[server-name]/api
2. DominoサーバーのNotes DBの一覧を返す
http://[server-name]/api/data
3. ビューのチェック?URL
http://[server-name]/[xxxx.nsf]/api/data/collections/unid/[view-UNID]?page=n
※?page=nは複数ページにまたがる場合に利?可能(表示したいページ数を指定する)
4. 文書のチェック?URL
http://[server-name]/[xxxx.nsf]/api/data/documents/unid/[document-UNID]
5. 指定したユーザのカレンダーのイベントの一覧を返す
http://[server-name]/[mail-file]/api/calendar/events
- 13 -
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
DominoにおけるREST/JSON
- 14 -
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
- 15 -
XPagesアプリを
作ってみた!
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
XPagesアプリを作ってみた!
? 今回作成したXPagesアプリケーション
1. 「書籍/蔵書検索」アプリケーション
? JSONPの形式で返す
2. 「路線検索」アプリケーション
? JSONの形式で返す
3. 「OnTime Open API」サンプル
? POSTメソッドでアクセスすることでデータを返す
- 16 -
1. 2. のアプリケーションは、
Bluemix上に構築してみました!!
http://miyo001.eu-gb.mybluemix.net/
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
XPagesアプリを作ってみた!
- 17 -
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
- 18 -
アプリのソースを
見てみよう!
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
アプリのソースを見てみよう!
? アプリケーションの肝
? HTTPリクエストの送信
? メソッドの種類を確認
? リクエストデータの有無を確認
? JSONデータを取得する
? JSON形式なのかJSONP形式かを確認
? JSONデータを処理する
? JSON形式なのかJSONP形式かを確認
- 19 -
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
アプリのソースを見てみよう!
? HTTPリクエストの送信
? リクエストの種類(メソッド)を確認する
? OnTime Open APIの場合、GETメソッドではなく、POSTメソッドで
あることに注意!
? HTTPリクエストを送信する際に、リクエスト?のJSONデータを生
成しておくこと!
? JavaScriptの連想配列として作成したものをJSON.stringfy関数で変
換
- 20 -
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
アプリのソースを見てみよう!
- 21 -
function getToken() {
var url = document.getElementById( "#{id:clientDBPath}" ).innerHTML + "apihttp";
var payload = {
"Main": {
"ApplID": "OnTime Open APIのApplication ID",
"ApplVer": "OnTime Open APIのバージョン番号",
"APIVer": "OnTime Open APIのビルド番号",
"CustomID": "1432733137335",
"Token": "OnTime Open APIのToken情報"
},
"Login": {}
};
strPostdata = JSON.stringify( payload ); // Request JSONとして生成
xmlhttp.onreadystatechange = getLogin; // レスポンスを受け取った時に呼ばれるメソッドを指定
xmlhttp.open( 'POST', url, true );
xmlhttp.setRequestHeader ( "Content-Type", "application/json; charset=utf-8" );
xmlhttp.send( strPostdata ); // リクエストデータ付きでHTTP送信
}
REST送信(OnTime Login):CSJS
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
アプリのソースを見てみよう!
? JSONの取得
? 別サイトのデータはそのままでは利?できない為、間接的に取得す
ることが必要!
? RESTサービスコントロールを利?すると一つのXPage内で取得可能!
– 「customRestService」の「doGet」に記述
- 22 -
// 【駅情報の検索】 駅名で検索可能。駅コードが取得可能。
var /ssuser40c5c0/xpagesday-2015-rest/siteInfo = "http://api.ekispert.com/v1/json/station";
var apiKey = “発行された認証キー";
var stname = context.getUrlParameter( "inStName" );;
var url:java.net.URL = new java.net.URL( /ssuser40c5c0/xpagesday-2015-rest/siteInfo + “?key=” + apiKey + “&name=” +
stname ); // ここでURLオブジェクトを生成している
return url.getContent(); // ここでURLのコンテンツ(即ち、JSONデータ)を取得している
JSONの取得(駅名検索):SSJS
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
アプリのソースを見てみよう!
? JSONの処理
? HTTP通信のレスポンスに従って行う
- 23 -
function method1() {
if ( xmlhttp.readyState == 4 && xmlhttp.status == 200 ) { // HTTPレスポンスを確認してOKなら処理を続ける
var ret = xmlhttp.responseText;
var obj = JSON.parse( ret ).ResultSet; // JSONデータをJavaScriptで扱えるオブジェクトに変換する
var stationcode = document.getElementById( "#{id:stationCode1}" );
stationcode.options.length = 0;
if ( obj.max == 0 ) {
document.getElementById( "#{id:cfErrMsg1}" ).innerHTML = "駅名は見つかりませんでした。再度入力してください。";
} else if ( obj.max == 1 ) {
stationcode.options[0] = new Option( obj.Point.Station.Name ); // JSONデータは連想配列に変換されるので、「.」でつないで取得する
stationcode.options[0].text = obj.Point.Station.Name;
stationcode.options[0].value = obj.Point.Station.code;
} else if ( obj.max > 1 ) {
for ( var i=0; i<obj.Point.length; i++ ) {
stationcode.options[i] = new Option( obj.Point[i].Station.Name );
stationcode.options[i].text = obj.Point[i].Station.Name;
stationcode.options[i].value = obj.Point[i].Station.code;
}
}
}
}
JSONの処理(駅名検索):CSJS
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
アプリのソースを見てみよう!
? JSONPの取得
? JSONPはJavaScriptの関数として定義されているので、scriptタグ
としてHTMLページの中に埋め込むようにする!
- 24 -
var /ssuser40c5c0/xpagesday-2015-rest/siteInfo = "http://api.calil.jp/library";
var apikey = "自分で取得したアプリケーションキー";
var prefId = document.getElementById( "#{id:prefecture1}" ).value;
var cityId = document.getElementById( "#{id:city1}" ).value;
var script = document.createElement( "script" );
script.src = /ssuser40c5c0/xpagesday-2015-rest/siteInfo + “?appkey=” + apikey + “&pref=” + prefId + “&city=” + cityId +
“&format=json&callback=callback”; // ここでURL文字列を生成している。callback=は関数名
document.head.appendChild(script); // ここでページに追加している
document.head.removeChild(script);
JSONPの取得(図書館IDの検索):CSJS
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
アプリのソースを見てみよう!
? JSONPの処理
? JSONPはJavaScriptの関数として定義されているので、呼び出し側
でコールバック関数として定義する
- 25 -
function callback(data) { // 関数名はJSONP取得時に決めている。また、引数がJSONデータを表している
var libname1 = document.getElementById( "#{id:libraryName1}" );
libname1.options.length = 0;
var libraries = data[0].formal; // formalという要素にアクセスしているが、配列なのでdata[0].~となる
var systemids = data[0].systemid;
for ( var i=1; i<data.length; i++ ) {
libraries = libraries + "," + data[i].formal;
systemids = systemids + "," + data[i].systemid;
}
var libArray = libraries.split( "," );
var sysidArray = systemids.split( "," );
for ( var i=0; i<libArray.length; i++ ) { // ここで「図書館名」というコンボボックスに選択肢を埋め込んでいる
libname1.options[i] = new Option( libArray[i] );
libname1.options[i].text = libArray[i];
libname1.options[i].value = sysidArray[i];
}
}
JSONPの処理(図書館IDの検索):CSJS
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
- 26 -
応用を考えよう!
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
応?を考えよう!
? Bluemixのサービスとの連携
? Node-RED + Speech To Text + Twilio + XPages
? 音声データをテキスト化したものをJSONデータに変換
? 音声での入力が可能に!
- 27 -
タイトルに「XPages」が
付く書籍を検索してくだ
さい。
XPages書籍名:
書式検索
検索結果:
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
応?を考えよう!
? Notes DBのデータを外部に公開
? ワークフローDB + JSON
? ワークフローの承認済みデータをJSONで提供
? 静的な連携ではなく、動的な連携が可能に!
? マスタDB + JSON
? Notes DBで作成したマスタDBを別のWebアプリケーションから参照
可能になる!
- 28 -
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
- 29 -
[参考資料]
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
[参考資料]
? DAS/REST関連のWebサイト
? IBM Domino Access Services 9.0.1
? IBM Notes and Domino Application Development wiki内のサイト(英語)
http://ibm.co/1wGMxzh
? デモで利用したツール
? REST Client
? Firefoxのアドオン。Response Headersの詳細も確認できる。日本語はUnicodeをデ
コード表示してくれるので分かり易い。
http://restclient.net/
? JSON Viewer
? Firefoxのアドオン。JSONドキュメントをブラウザー内で階層化表示してくれる。ダ
ブルバイトもデコードしてくれるので、とても見やすい。
http://jsonview.com/
- 30 -
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
[参考資料]
? デモで利用したWeb APIサービス
? 楽天Webサービス
? 楽天ブックス書籍検索API等、楽天のデータや機能を提供してくれるAPI群
http://webservice.rakuten.co.jp/
? カーリル図書館API
? 全国6,000の図書館に簡単アクセスして、リアルタイム蔵書検索を可能にするAPI群
https://calil.jp/doc/api.html
? 駅すぱあとWebサービス
? ビジネス向け経路検索のクラウド型API/GUIソリューション
https://ekiworld.net/service/sier/webservice/index.html
? OnTime Group Calendar API Explorer
? OnTime Group Calendar内にあるOnTime Open APIをエミュレートするための
ツール
http://demo.ontimesuite.com/apiexplorer
- 31 -
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
- 32 -
ご清聴ありがとうございました
REST APIやJSONは
IBM Notes/Dominoに
+αをもたらします!
是非、覚えましょう!!
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t
免責事項について
?本資料は、個人的な見解によるものです。情報の内容につい
ては万全を期しておりますが、その内容を保証するものでは
ありません。
?本資料の情報は、使?先の責任において使?されるべきもの
であることを、あらかじめご了承ください。
?執筆者の承諾なしに、コピー、複製、他のメディアに転載す
る事はご遠慮ください。
?当資料に記載された製品名または会社名はそれぞれの各社の
商標または登録商標です。
- 33 -
?2015 ef Co., Ltd. All rights Reserved.
f o r c ee f f e c t

More Related Content

What's hot (20)

PDF
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5
sleepy_yoshi
?
PDF
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Kei IWASAKI
?
PDF
//publish/ MSPTutorial 応用編
Yuki Igarashi
?
PDF
みんなのPython勉強会#77 パッケージングしよう
Atsushi Odagiri
?
PDF
Sc2009autumn s2robot
Shinsuke Sugaya
?
PDF
ソーシャルゲーム案件における顿叠分割の笔贬笔実装
infinite_loop
?
PDF
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
id774
?
PDF
笔贬笔の今とこれから2019
Rui Hirokawa
?
PDF
辫别谤蹿を使った笔辞蝉迟驳谤别厂蚕尝の解析(后编)
NTT DATA OSS Professional Services
?
PDF
奥别产アプリ开発者のための贬罢惭尝5セキュリティ入门
Muneaki Nishimura
?
PDF
Easy caching and logging package using annotation in Python
Yasunori Horikoshi
?
PDF
勉強会force#4 Chatter Integration
Kazuki Nakajima
?
PDF
PYTHON PACKAGING (PyFes 2012.03 発表資料)
Takayuki Shimizukawa
?
PDF
尝补蝉迟补贵濒耻迟别で碍辞迟濒颈苍をはじめよう
Shinsuke Sugaya
?
PDF
骋补谤补驳别をもうちょっと触ってみた
Yoichi Toyota
?
PPTX
笔补苍诲辞谤补贵惭厂のはなし
Nigara Ryoji
?
PDF
3分でサーバオペレーションコマンドを作る技术
Kei IWASAKI
?
PPT
1221产辞迟讲习会
佑輔 小林
?
DSIRNLP#3 LT: 辞書挟み込み型転置インデクスFIg4.5
sleepy_yoshi
?
Cli mini Hack!#1 ~Terminalとの親睦を深めよう~
Kei IWASAKI
?
//publish/ MSPTutorial 応用編
Yuki Igarashi
?
みんなのPython勉強会#77 パッケージングしよう
Atsushi Odagiri
?
Sc2009autumn s2robot
Shinsuke Sugaya
?
ソーシャルゲーム案件における顿叠分割の笔贬笔実装
infinite_loop
?
Twitter クライアント “Termtter” の紹介と収集したソーシャルデータを Fluentd + Hadoop で分析する話
id774
?
笔贬笔の今とこれから2019
Rui Hirokawa
?
辫别谤蹿を使った笔辞蝉迟驳谤别厂蚕尝の解析(后编)
NTT DATA OSS Professional Services
?
奥别产アプリ开発者のための贬罢惭尝5セキュリティ入门
Muneaki Nishimura
?
Easy caching and logging package using annotation in Python
Yasunori Horikoshi
?
勉強会force#4 Chatter Integration
Kazuki Nakajima
?
PYTHON PACKAGING (PyFes 2012.03 発表資料)
Takayuki Shimizukawa
?
尝补蝉迟补贵濒耻迟别で碍辞迟濒颈苍をはじめよう
Shinsuke Sugaya
?
骋补谤补驳别をもうちょっと触ってみた
Yoichi Toyota
?
笔补苍诲辞谤补贵惭厂のはなし
Nigara Ryoji
?
3分でサーバオペレーションコマンドを作る技术
Kei IWASAKI
?
1221产辞迟讲习会
佑輔 小林
?

Similar to XPagesDay 2015 RESTの総復習 (20)

PDF
齿笔补驳别蝉で搁贰厂罢を使ってみよう
Masahiko Miyo
?
PPTX
Domino & REST
賢次 海老原
?
PPTX
顿辞尘颈苍辞アクセスサービスを使用した搁贰厂罢サービスのプレイブック
Mitsuru Katoh
?
PDF
Why Don't You Start XPages Application Development?
Atsushi Sato
?
PPTX
Mobile Application Development by XPages
Atsushi Sato
?
PDF
I Log On Saa S
totty jp
?
PDF
CloudSpiral 2014年度 Webアプリ講義(1日目)
Shin Matsumoto
?
KEY
XPages 開発 Tips 百連発
Mitsuru Katoh
?
PDF
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
Takeshi Yoshida
?
PDF
XPages Day2015 実践 XPages on Bluemix
賢次 海老原
?
PDF
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
Rakuten Group, Inc.
?
PDF
IBM Notes/Domino and IBM Bluemix
Atsushi Sato
?
PPTX
Lotus Notes/Domino Application Development by XPages and Beyond
Atsushi Sato
?
KEY
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
linzhixing
?
PDF
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
Hiroaki Komine
?
PDF
XPagesDay 2013 Closing Session
Atsushi Sato
?
PDF
XPagesDay2012 3-A Titanium mobileによるモバイルアプリケーションとXPages連携
Tetsuji Hayashi
?
PDF
HCL Domino REST API 利用ガイド
Software Info HCL Japan
?
PPTX
formBuilderにより フォームを簡単作成(オープンセミナー版)
Masahiko Miyo
?
PPTX
Domino Voltアプリケーションを作成してみたよ!
Masahiko Miyo
?
齿笔补驳别蝉で搁贰厂罢を使ってみよう
Masahiko Miyo
?
Domino & REST
賢次 海老原
?
顿辞尘颈苍辞アクセスサービスを使用した搁贰厂罢サービスのプレイブック
Mitsuru Katoh
?
Why Don't You Start XPages Application Development?
Atsushi Sato
?
Mobile Application Development by XPages
Atsushi Sato
?
I Log On Saa S
totty jp
?
CloudSpiral 2014年度 Webアプリ講義(1日目)
Shin Matsumoto
?
XPages 開発 Tips 百連発
Mitsuru Katoh
?
今日から始める XPages アプリケーション開発!(オープンセミナー 2016 ハンズオン XPagesDay 出張セッション)
Takeshi Yoshida
?
XPages Day2015 実践 XPages on Bluemix
賢次 海老原
?
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
Rakuten Group, Inc.
?
IBM Notes/Domino and IBM Bluemix
Atsushi Sato
?
Lotus Notes/Domino Application Development by XPages and Beyond
Atsushi Sato
?
Alfresco勉強会20120829: やさしいShareダッシュレットの作り方
linzhixing
?
テクてく Lotus 技術者夜会 03/16 Lotus Notes/Domino Upgrade Pack とは
Hiroaki Komine
?
XPagesDay 2013 Closing Session
Atsushi Sato
?
XPagesDay2012 3-A Titanium mobileによるモバイルアプリケーションとXPages連携
Tetsuji Hayashi
?
HCL Domino REST API 利用ガイド
Software Info HCL Japan
?
formBuilderにより フォームを簡単作成(オープンセミナー版)
Masahiko Miyo
?
Domino Voltアプリケーションを作成してみたよ!
Masahiko Miyo
?
Ad

More from Masahiko Miyo (12)

PDF
Notes/Domino 開発tipsサービスについて
Masahiko Miyo
?
PPTX
私が作成した痴辞濒迟アプリの绍介
Masahiko Miyo
?
PDF
Col113 introducing the hcl domino volt application i created
Masahiko Miyo
?
PPTX
痴辞濒迟アプリをバージョンアップ!
Masahiko Miyo
?
PPTX
初心者向け狈辞迟别蝉/顿辞尘颈苍辞の开発テクニック
Masahiko Miyo
?
PPTX
Nomad アプリも作成してみたよ!
Masahiko Miyo
?
PPTX
対称クラスタの设定と动作确认
Masahiko Miyo
?
PPTX
蹿辞谤尘叠耻颈濒诲别谤によりフォームを简単作成
Masahiko Miyo
?
PDF
HCL Nomad用アプリケーション プレゼント企画
Masahiko Miyo
?
PDF
三度、おじさんSEはIBM ConnectEDへ行ってきた
Masahiko Miyo
?
PDF
サーバー认証
Masahiko Miyo
?
PDF
顿辞尘颈苍辞认証局の作成
Masahiko Miyo
?
Notes/Domino 開発tipsサービスについて
Masahiko Miyo
?
私が作成した痴辞濒迟アプリの绍介
Masahiko Miyo
?
Col113 introducing the hcl domino volt application i created
Masahiko Miyo
?
痴辞濒迟アプリをバージョンアップ!
Masahiko Miyo
?
初心者向け狈辞迟别蝉/顿辞尘颈苍辞の开発テクニック
Masahiko Miyo
?
Nomad アプリも作成してみたよ!
Masahiko Miyo
?
対称クラスタの设定と动作确认
Masahiko Miyo
?
蹿辞谤尘叠耻颈濒诲别谤によりフォームを简単作成
Masahiko Miyo
?
HCL Nomad用アプリケーション プレゼント企画
Masahiko Miyo
?
三度、おじさんSEはIBM ConnectEDへ行ってきた
Masahiko Miyo
?
サーバー认証
Masahiko Miyo
?
顿辞尘颈苍辞认証局の作成
Masahiko Miyo
?
Ad

Recently uploaded (9)

PDF
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
PDF
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
?
PDF
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
PDF
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
PDF
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
PDF
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
?
PDF
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
?
PDF
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
?
安尾 萌, 藤代 裕之, 松下 光範. 協調的情報トリアージにおけるコミュニケーションの影響についての検討, 第11回データ工学と情報マネジメントに関する...
Matsushita Laboratory
?
API認可を支えるKeycloakの基本と設計の考え方 ~ OAuth/OIDCによるAPI保護のベストプラクティス ~
Hitachi, Ltd. OSS Solution Center.
?
論文紹介:Unbiasing through Textual Descriptions: Mitigating Representation Bias i...
Toru Tamaki
?
論文紹介:AutoPrompt: Eliciting Knowledge from Language Models with Automatically ...
Toru Tamaki
?
安尾 萌, 松下 光範. 環境馴致を計量可能にするための試み,人工知能学会第4回仕掛学研究会, 2018.
Matsushita Laboratory
?
安尾 萌, 北村 茂生, 松下 光範. 災害発生時における被害状況把握を目的とした情報共有システムの基礎検討, 電子情報通信学会HCGシンポジウム2018...
Matsushita Laboratory
?
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2024_報告会資料_増野さ...
IGDA Japan SIG-Audio
?
マルチAIエージェントの産業界での実践に向けたオープンソース活動の展望 - Japan Regional User Group (RUG) Meet-Up
Kosaku Kimura
?
SIG-AUDIO 2025 Vol.02 オンラインセミナー 「GDC2025 オーディオ報告会」SIG-Audio_GDC2025_報告会資料_渡辺さ...
IGDA Japan SIG-Audio
?

XPagesDay 2015 RESTの総復習

  • 2. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t 今回のセッションに関するお問い合わせは、↓こちらまで↓ 御代 政彦(みよ まさひこ) 2011年12月からIBM Champion for ICSをやってます Twitter:@guylocke Facebook:guylocke34 ブログ:http://guylocke.blogspot.jp - 2 - 自己紹介 のおつ 検索 株式会社エフ ef-info@effect-force.co.jp
  • 3. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t アジェンダ ? RESTについて ? RESTとは? ? JSON/JSONPとは? ? DominoにおけるREST/JSON ? 設定方法のおさらい ? 実際のデータを見てみよう ? XPagesアプリを作ってみた! ? JSONPで返してくる場合 ? JSONで返してくる場合 ? OnTime Open APIを使った場合 ? アプリのソースを見てみよう! ? 応用を考えよう! ? Bluemixのサービスとの連携 ? Notes DBのデータを外部に公開 - 3 -
  • 4. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t - 4 - RESTについて
  • 5. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t RESTについて ? RESTとは? ? HTTP ベースの軽量なWeb API を提供 ? データにはXML やJSON などの形式を利? ? HTTP のGET/POST/PUT/DELETE メソッドでCRUD 操作を実現 - 5 -
  • 6. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t RESTについて ? RESTとは? ? HTTP ベースの軽量なWeb API を提供 ? データにはXML やJSON などの形式を利? ? HTTP のGET/POST/PUT/DELETE メソッドでCRUD 操作を実現 - 6 - HTTPで特定のURLにアクセスすると、 JSONのデータが返ってくるよ! 要するに??? ということです!
  • 7. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t RESTについて ? JSON/JSONPとは? ? JavaScriptにおけるオブジェクトのように記述できる軽量なデータ フォーマット ? JSONPはJSONを関数呼び出しの形式にしたもの ? クロスドメインでの利?をしやすくするため - 7 -
  • 8. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t RESTについて ? JSON/JSONPとは? ? JavaScriptにおけるオブジェクトのように記述できる軽量なデータ フォーマット ? JSONPはJSONを関数呼び出しの形式にしたもの ? クロスドメインでの利?をしやすくするため - 8 - XPagesで利用するのに適したデータ形式 要するに??? ということです!
  • 9. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t - 9 - Dominoにおける REST/JSON
  • 10. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t DominoにおけるREST/JSON ? 設定方法のおさらい 1. Dominoディレクトリのサーバ文書内にある「Domino アクセス サービス」の「有効なサービス」にサービス名を設定する。 ? 2015年11月時点で設定可能なのは「Data, TravelerAdmin, Calendar, Mail, FreeBusy」 2. サーバ文書を保存後、 Dominoサーバコンソールで tell http refresh と入力! - 10 -
  • 11. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t DominoにおけるREST/JSON ? 設定方法のおさらい 3. Notes DBの「データベースプロパティ」の[詳細]タブ(一番右) を開く 4. 「IBM Domino データサービスを許可」の 値を「ビューと文書」に変更する - 11 - ODSのバージョンは問わない!
  • 12. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t DominoにおけるREST/JSON ? 設定方法のおさらい 5. Domino Designerでビュープロパティの[詳細]タブ(右か ら二番目)を開き、「IBM Domino データサービスの操 作を許可」にチェックをつける 6. ビューを保存! - 12 - RESTアクセスを許可していないビューは 「HTTP403」エラーになる
  • 13. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t DominoにおけるREST/JSON ? 実際のデータを見てみよう 1. Dominoサーバーで許可されているData Serviceの種類を返す http://[server-name]/api 2. DominoサーバーのNotes DBの一覧を返す http://[server-name]/api/data 3. ビューのチェック?URL http://[server-name]/[xxxx.nsf]/api/data/collections/unid/[view-UNID]?page=n ※?page=nは複数ページにまたがる場合に利?可能(表示したいページ数を指定する) 4. 文書のチェック?URL http://[server-name]/[xxxx.nsf]/api/data/documents/unid/[document-UNID] 5. 指定したユーザのカレンダーのイベントの一覧を返す http://[server-name]/[mail-file]/api/calendar/events - 13 -
  • 14. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t DominoにおけるREST/JSON - 14 -
  • 15. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t - 15 - XPagesアプリを 作ってみた!
  • 16. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t XPagesアプリを作ってみた! ? 今回作成したXPagesアプリケーション 1. 「書籍/蔵書検索」アプリケーション ? JSONPの形式で返す 2. 「路線検索」アプリケーション ? JSONの形式で返す 3. 「OnTime Open API」サンプル ? POSTメソッドでアクセスすることでデータを返す - 16 - 1. 2. のアプリケーションは、 Bluemix上に構築してみました!! http://miyo001.eu-gb.mybluemix.net/
  • 17. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t XPagesアプリを作ってみた! - 17 -
  • 18. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t - 18 - アプリのソースを 見てみよう!
  • 19. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t アプリのソースを見てみよう! ? アプリケーションの肝 ? HTTPリクエストの送信 ? メソッドの種類を確認 ? リクエストデータの有無を確認 ? JSONデータを取得する ? JSON形式なのかJSONP形式かを確認 ? JSONデータを処理する ? JSON形式なのかJSONP形式かを確認 - 19 -
  • 20. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t アプリのソースを見てみよう! ? HTTPリクエストの送信 ? リクエストの種類(メソッド)を確認する ? OnTime Open APIの場合、GETメソッドではなく、POSTメソッドで あることに注意! ? HTTPリクエストを送信する際に、リクエスト?のJSONデータを生 成しておくこと! ? JavaScriptの連想配列として作成したものをJSON.stringfy関数で変 換 - 20 -
  • 21. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t アプリのソースを見てみよう! - 21 - function getToken() { var url = document.getElementById( "#{id:clientDBPath}" ).innerHTML + "apihttp"; var payload = { "Main": { "ApplID": "OnTime Open APIのApplication ID", "ApplVer": "OnTime Open APIのバージョン番号", "APIVer": "OnTime Open APIのビルド番号", "CustomID": "1432733137335", "Token": "OnTime Open APIのToken情報" }, "Login": {} }; strPostdata = JSON.stringify( payload ); // Request JSONとして生成 xmlhttp.onreadystatechange = getLogin; // レスポンスを受け取った時に呼ばれるメソッドを指定 xmlhttp.open( 'POST', url, true ); xmlhttp.setRequestHeader ( "Content-Type", "application/json; charset=utf-8" ); xmlhttp.send( strPostdata ); // リクエストデータ付きでHTTP送信 } REST送信(OnTime Login):CSJS
  • 22. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t アプリのソースを見てみよう! ? JSONの取得 ? 別サイトのデータはそのままでは利?できない為、間接的に取得す ることが必要! ? RESTサービスコントロールを利?すると一つのXPage内で取得可能! – 「customRestService」の「doGet」に記述 - 22 - // 【駅情報の検索】 駅名で検索可能。駅コードが取得可能。 var /ssuser40c5c0/xpagesday-2015-rest/siteInfo = "http://api.ekispert.com/v1/json/station"; var apiKey = “発行された認証キー"; var stname = context.getUrlParameter( "inStName" );; var url:java.net.URL = new java.net.URL( /ssuser40c5c0/xpagesday-2015-rest/siteInfo + “?key=” + apiKey + “&name=” + stname ); // ここでURLオブジェクトを生成している return url.getContent(); // ここでURLのコンテンツ(即ち、JSONデータ)を取得している JSONの取得(駅名検索):SSJS
  • 23. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t アプリのソースを見てみよう! ? JSONの処理 ? HTTP通信のレスポンスに従って行う - 23 - function method1() { if ( xmlhttp.readyState == 4 && xmlhttp.status == 200 ) { // HTTPレスポンスを確認してOKなら処理を続ける var ret = xmlhttp.responseText; var obj = JSON.parse( ret ).ResultSet; // JSONデータをJavaScriptで扱えるオブジェクトに変換する var stationcode = document.getElementById( "#{id:stationCode1}" ); stationcode.options.length = 0; if ( obj.max == 0 ) { document.getElementById( "#{id:cfErrMsg1}" ).innerHTML = "駅名は見つかりませんでした。再度入力してください。"; } else if ( obj.max == 1 ) { stationcode.options[0] = new Option( obj.Point.Station.Name ); // JSONデータは連想配列に変換されるので、「.」でつないで取得する stationcode.options[0].text = obj.Point.Station.Name; stationcode.options[0].value = obj.Point.Station.code; } else if ( obj.max > 1 ) { for ( var i=0; i<obj.Point.length; i++ ) { stationcode.options[i] = new Option( obj.Point[i].Station.Name ); stationcode.options[i].text = obj.Point[i].Station.Name; stationcode.options[i].value = obj.Point[i].Station.code; } } } } JSONの処理(駅名検索):CSJS
  • 24. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t アプリのソースを見てみよう! ? JSONPの取得 ? JSONPはJavaScriptの関数として定義されているので、scriptタグ としてHTMLページの中に埋め込むようにする! - 24 - var /ssuser40c5c0/xpagesday-2015-rest/siteInfo = "http://api.calil.jp/library"; var apikey = "自分で取得したアプリケーションキー"; var prefId = document.getElementById( "#{id:prefecture1}" ).value; var cityId = document.getElementById( "#{id:city1}" ).value; var script = document.createElement( "script" ); script.src = /ssuser40c5c0/xpagesday-2015-rest/siteInfo + “?appkey=” + apikey + “&pref=” + prefId + “&city=” + cityId + “&format=json&callback=callback”; // ここでURL文字列を生成している。callback=は関数名 document.head.appendChild(script); // ここでページに追加している document.head.removeChild(script); JSONPの取得(図書館IDの検索):CSJS
  • 25. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t アプリのソースを見てみよう! ? JSONPの処理 ? JSONPはJavaScriptの関数として定義されているので、呼び出し側 でコールバック関数として定義する - 25 - function callback(data) { // 関数名はJSONP取得時に決めている。また、引数がJSONデータを表している var libname1 = document.getElementById( "#{id:libraryName1}" ); libname1.options.length = 0; var libraries = data[0].formal; // formalという要素にアクセスしているが、配列なのでdata[0].~となる var systemids = data[0].systemid; for ( var i=1; i<data.length; i++ ) { libraries = libraries + "," + data[i].formal; systemids = systemids + "," + data[i].systemid; } var libArray = libraries.split( "," ); var sysidArray = systemids.split( "," ); for ( var i=0; i<libArray.length; i++ ) { // ここで「図書館名」というコンボボックスに選択肢を埋め込んでいる libname1.options[i] = new Option( libArray[i] ); libname1.options[i].text = libArray[i]; libname1.options[i].value = sysidArray[i]; } } JSONPの処理(図書館IDの検索):CSJS
  • 26. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t - 26 - 応用を考えよう!
  • 27. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t 応?を考えよう! ? Bluemixのサービスとの連携 ? Node-RED + Speech To Text + Twilio + XPages ? 音声データをテキスト化したものをJSONデータに変換 ? 音声での入力が可能に! - 27 - タイトルに「XPages」が 付く書籍を検索してくだ さい。 XPages書籍名: 書式検索 検索結果:
  • 28. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t 応?を考えよう! ? Notes DBのデータを外部に公開 ? ワークフローDB + JSON ? ワークフローの承認済みデータをJSONで提供 ? 静的な連携ではなく、動的な連携が可能に! ? マスタDB + JSON ? Notes DBで作成したマスタDBを別のWebアプリケーションから参照 可能になる! - 28 -
  • 29. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t - 29 - [参考資料]
  • 30. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t [参考資料] ? DAS/REST関連のWebサイト ? IBM Domino Access Services 9.0.1 ? IBM Notes and Domino Application Development wiki内のサイト(英語) http://ibm.co/1wGMxzh ? デモで利用したツール ? REST Client ? Firefoxのアドオン。Response Headersの詳細も確認できる。日本語はUnicodeをデ コード表示してくれるので分かり易い。 http://restclient.net/ ? JSON Viewer ? Firefoxのアドオン。JSONドキュメントをブラウザー内で階層化表示してくれる。ダ ブルバイトもデコードしてくれるので、とても見やすい。 http://jsonview.com/ - 30 -
  • 31. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t [参考資料] ? デモで利用したWeb APIサービス ? 楽天Webサービス ? 楽天ブックス書籍検索API等、楽天のデータや機能を提供してくれるAPI群 http://webservice.rakuten.co.jp/ ? カーリル図書館API ? 全国6,000の図書館に簡単アクセスして、リアルタイム蔵書検索を可能にするAPI群 https://calil.jp/doc/api.html ? 駅すぱあとWebサービス ? ビジネス向け経路検索のクラウド型API/GUIソリューション https://ekiworld.net/service/sier/webservice/index.html ? OnTime Group Calendar API Explorer ? OnTime Group Calendar内にあるOnTime Open APIをエミュレートするための ツール http://demo.ontimesuite.com/apiexplorer - 31 -
  • 32. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t - 32 - ご清聴ありがとうございました REST APIやJSONは IBM Notes/Dominoに +αをもたらします! 是非、覚えましょう!!
  • 33. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t 免責事項について ?本資料は、個人的な見解によるものです。情報の内容につい ては万全を期しておりますが、その内容を保証するものでは ありません。 ?本資料の情報は、使?先の責任において使?されるべきもの であることを、あらかじめご了承ください。 ?執筆者の承諾なしに、コピー、複製、他のメディアに転載す る事はご遠慮ください。 ?当資料に記載された製品名または会社名はそれぞれの各社の 商標または登録商標です。 - 33 -
  • 34. ?2015 ef Co., Ltd. All rights Reserved. f o r c ee f f e c t