21
2017/5/6 初版作成 2017/5/8 Cocoa勉強会池袋での デモの結果を反映して微修正 Piyomaru Software Takaaki Naganoya http://piyocast.com/as/ Playing with RESTful APIs

Playing with rest api

Embed Size (px)

Citation preview

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して呼び出す

APIのテスターCocoaRESTClient(Mac AppStoreで入手可)など

endpoint(URL) method

key-value形式のパラメータ

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

絶賛発売中!(4/4)購入者特典!(要メール)コンテクストメニューからASのほぼすべての基本構文を入力「スクリプトアシスタント」

各種命令のオプション自動入力から、高度なScript書き換え、分析機能、実行したらスリープさせるなどの運用機能を搭載

https://piyomarusoft.booth.pm