playing with rest api
TRANSCRIPT
2017/5/6 初版作成 2017/5/8 Cocoa勉強会池袋でのデモの結果を反映して微修正
Piyomaru Software Takaaki Naganoya
http://piyocast.com/as/
☁☁Playing with RESTful APIs
どうしてクラウド?・インターネット系のおいしい機能をスケーラブルに提供
・大規模サーバーの運用により、従来では難しかったサービスが提供されるようになってきた(画像の顔認識→顔識別など)
・スマホのアプリはもちろんのこと、ローカルのコンピューター上のアプリケーションで利用してもメリットが大きい・機械学習など、強大なインフラが必要な用途のサービスがすぐに使える・(提供側)サービスの利用範囲を広げることで、サービスの有用性を高める→利用者を増やす→利益
Cloudのサービスを呼ぶAPI
Cloud サービス
REST API
プログラミング言語は割となんでもいい
呼ぶのは、クライアント上のプログラム、および他のWebサーバー上のプログラムcurlコマンドでも呼べるので、unix shellでも呼べる
誰がREST APIを呼ぶか?
Cloud サービス
REST API
呼び出す側は、クライアント側のプログラム、および他のWebサーバー上のプログラム(Webコンテンツも)Webサーバー間で呼び合うのは、セキュリティ上制約が大きい(クロスサイト・スクリプティング)が、クライアント側では問題ない
Web上のプログラムを呼び出すAPIの歴史
手段 特徴
90年代 CGI 送信データ形式不統一、受信データの分解を受け取り側で実行。規格不在
90年代後半~2000年
代?SOAP, XML-RPC RPC時のデータの受け渡しをXMLで行う。
サーバーへの負担(拘束時間)が大きい
2010年代 REST
ステートレス、シンプルなリクエストとリプライから構成され、リクエスト処理後にすぐに結果を返すためサーバーへの負担(拘束時間)が少ない
REST API MethodsMethods 概要 用途
POST サーバー側へのデータの投稿 画像認識など。大きなデータをサーバー側に渡すようなケース
GET サーバー側の機能呼び出し 単純な機能の呼び出し
PUT ほとんど使わない ほとんど見ない
DELETE サーバー側のデータ削除(ほとんど使わない) ほとんど見ない
http://jsonplaceholder.typicode.com
手軽にこれらのメソッドを試せるサイト【超オススメ】
JSONPlaceholder
APIが使えるようになるまでの手続きユーザー登録が必要なサービス、OAuth 2認証を使わない場合
・サイトにユーザー登録・サイト上でサービス単位でEnable/Disableの設定・プログラム(プロジェクト)単位で利用APIの設定・サイト上でAPI Keyの確認・自分のプログラムにAPI Keyを記入・自分のプログラムからAPI呼び出し
サービスごとに、この手続き・手順が違うので、ここを乗り越えるのが大変。あと、英語で書かれている場合が多いので、英語が苦手だと進めない
REST API呼び出し時の認証手順■単純な呼び出し ■2段階認証初期開発時など、素早く機能のチェックやテストを行うような用途
アプリストアなどで配布するアプリにAPI呼び出しを組み込むような用途
プロジェクト単位で呼び出しAPIを指定
プロジェクト単位でAPI Keyを発行
プログラム中でAPI Keyを指定してサービス呼び出し
プロジェクト単位で呼び出しAPIを指定
プロジェクト単位で配布用API Keyを発行
プログラム中で配布用API Keyを指定してOAuth2呼び出し
OAuth2で認証
認証して得られたトークンを使ってサービス呼び出し
パラメータの受け渡し方GET POST
パラメータ URLと一緒にエンコーディングして呼び出す
Request BodyにJSON形式で入れることが多い
Content-type 指定なし
application/octet-stream画像認識などの場合
application/json入り組んだパラメータを受け渡すような場合
API Keyの受け渡し方サービス提供者 API Keyの受け渡し方
Dropbox,Slack,Twitter aRequest's setValue:anAPIkey forHTTPHeaderField:"Authorization"HTTPヘッダーのフィールド”Authentication”にAPI Keyを設定
Microsoft
aRequest's setValue:anAPIkey forHTTPHeaderField:"Ocp-Apim-Subscription-Key"HTTPヘッダーのフィールド”Ocp-Apim-Subscription-Key”にAPI Keyを設定
APITORE,Goo,Key Lemon,NHK, Open
WeatherMap,Yahoo!,ぐるなび,じゃらん
URLに一緒に入れてURL Encodingして呼び出す
Bit.ly, Stack Exchange (OAuth2でAccess Tokenを取得し)URLに一緒に入れてURL Encodingして呼び出す
Google (APIごとに仕様バラバラ)URLに一緒に入れてURL Encodingして呼び出す
RESTful API呼び出しの特徴・スケーラビリティのある処理が手軽に呼べる・並列処理で同時にいくつものスレッドで呼べる・インストールなどのわずらわしい準備を行わなくて済む・引越し、乗り換えなどが自由・呼び出し回数が増えると有料、というケースが多い・1つのAPIを使えるようになると、同じ提供者の他のAPIも呼び出すのは簡単(Googleをのぞく)
・複数の提供者の複数のAPIを組み合わせると高度な処理が可能(1つの提供者のサービスだけでは完結しない)
Demonstration-- Created 2017-05-06 by Takaaki Naganoya -- 2017 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "AppKit" use msImage : script "microsoftImageLib"
set tmpFol to (path to temporary items)
tell application "Photos" set aList to selection
repeat with i in aList set j to first item of i set exportedPath to "" set aFileName to filename of j export {j} to (tmpFol) set expPath to (tmpFol as string) & aFileName set aTagList to getImgTagsFromPath(POSIX path of expPath) of msImage do shell script "/bin/rm " & quoted form of POSIX path of expPath tell j set keywords to aTagList end tell end repeat end tell
--> {"indoor", "computer", "keyboard", "sitting", "electronics", "table", "top", "laptop", "mouse", "desk", "black", "open", "white", "wooden", "laying"}
RESTful API呼び出しのマイナス点・サーバー側は必ず応答するとは限らない(障害など)・サーバー側は必ず期待する応答をするとは限らない・サーバー側は必ず期待する時間内に応答するとは限らない・サービス内容およびクオリティは実際にプログラムを書いて実験してみないと検証できない・ローカルのOS内部のAPIよりも高機能であるとの保証は何もない。実際にテストデータで比較するしかない(顔認識、テキストの言語認識など)
言語ごとのREST API呼び出しの傾向
SDKが提供されており 呼び出し部分が隠蔽化され
ているもの
生のHTTP リクエストと格闘するもの
Swift, Objective-C AppleScript
SDKが用意されていないサービスだと急に難易度
が上がる
だいたいどこでも同じ ような感じ
OAuth2の認証もすべて実装した(汗)
絶賛発売中!(1/4)
Hop, Step, Jumpの3段階難易度設定。いきなり難しくなりません
https://piyomarusoft.booth.pm
Mac上のアプリケーション操作のHello World体験をご提供する「絵本」です
全48ページ(PDF)フルカラー
最終章のプログラムでも10行以下。難しくないのにiTunesライブラリ内の曲のしぼり込み検索&再生まで実行!
新刊
絶賛発売中!(2/4)AppleScriptの詳細な歴史OSバージョンごとの違いなどの資料充実!
https://piyomarusoft.booth.pm
環境依存しないScriptの書き方から、Cocoaの呼び出し方、クラウド系のREST APIの呼び出しまで最新事情にフォーカスした読み物系の本
全148ページ(PDF)
絶賛発売中!(3/4)AppleScriptの詳細な参考書プログラマ向けの簡素な入門編「最速マスター」ほぼすべての予約語で用例サンプルを掲載
全483ページ(PDF)
iOSとの連携、OfficeやFMのスクリプト内での書き方クリックするとエディタに転送されるサンプル多数掲載
https://piyomarusoft.booth.pm