Web APIサーバーをpython+falconで構築する - 多重人格

Web APIサーバーをpython+falconで構築する

 Web APIが熱いらしい。Web APIとはhttp://hoge/dataみたいなURLにhttpのGETメソッドをやると、レスポンスでjsonデータを返してくれるようなやつ。TwitterのAPIでタイムラインを取得するようなやつはまさにこれを使っている。RESTなAPIというらしい。言葉はどうでもいい。

 んで、pythonで自分でWeb APIのサーバー立てて動作を確認したいなあと思ってやってみたら、驚くほど簡単にできたので実装メモ。Web APIを実現するにあたり、pythonのfalconというpackageを使った。どうぞpip install falconでインストールしてほしい。

 サーバー側のソースは下記。



ポイントとしては、

api.add_route('/vehicle/12345678', ItemsResource())

でデータを格納するURL(リソース)を決める。

その後、

httpd = simple_server.make_server('127.0.0.1', 8000, api)
httpd.serve_forever()

でそのリソースをhttp://127.0.0.1:8000の上で動作させてやる感じ。
こうするとhttp://127.0.0.1:8000/vehicle/12345678 にGETやらPOSTのメソッドを送ってやるといろいろ処理できる。

このサンプルではGETメソッドでサーバー上の変数itemsの値が取得できるようになっている。

def on_get(self, req, resp):
''' Handles GET requests '''
resp.body = json.dumps(self.items)

の部分でGETメソッドがされた時に、レスポンスのBodyにjsonデータを格納してクライアントに返す。

def on_put(self, req, resp):
print 'put'
body = req.stream.read()
data = json.loads(body)
print data
try :
self.items['Components']['GW'] = data['Components']['GW']
self.items['Components']['ECU1'] = data['Components']['ECU1']

の部分でPUTメソッドが来た時に、リクエストのBody(jsonが入る)を読んでそのjsonでitemsを更新してやる。

クライアント側の処理は下記。ポイントは後述する。



GETメソッドの場合は

h.request('GET', '/vehicle/12345678')

のようにやり、これのresponseをjsonで読み込むことでサーバー上のitemsと云う変数の値を取得できる。


PUTメソッドの場合は逆にサーバー上のitemsと云う変数を更新するために、同じ形式のjsonを

h.request('PUT', '/vehicle/12345678', json.dumps(data))

で第3引数にjsonデータを入れてやる。するとサーバーのon_putに通知が行き、

body = req.stream.read()

でサーバー側はjsonデータを読んで値を更新する。簡単だね。


ソースと使い方は下記に格納してあるのでご参考。

https://github.com/yheihei/python/tree/master/webapi



このエントリーをはてなブックマークに追加

 Y平 (31)

現在:
Androidプラットフォーム開発者。シナリオ作成も趣味でコンテストに
色々応募をしています。人形劇もやっています。

略歴:
2004年〜2009年 名古屋大学で人形劇サークルで活動後、作家を目指すも挫折。
2009年〜 札幌のモバイルの会社に勤めて適当にプログラミングやらに従事。
2012年 ヒューマンアカデミー シナリオライター講座受講。シナリオライターに。
2013年4月、妻と結婚
2015年8月、オモコロライターになる

作品暦:
「えんむすび」 子供映画製作ワークショップ2012最終候補
「思い出はとめたままに」 2012年南のシナリオ大賞 落選
「マリモの人形劇」アニメシナリオ大賞 選考中(2015年4月現在)
「しっくす・パックす!」第22回電撃コミック大賞 選考中(2015年4月現在)
「上から」コバルト短編小説新人賞 選考中(2015年8月結果発表)

好きな作家:
筒井康隆 綿矢りさ 星新一 藤子・F・不二雄 戸塚たくす

その他活動:
ニコニコ動画ゲーム実況一覧
twitter 気軽にフォローしてください→@yhei_hei

mail :
yheihei0126●gmail.com(●を@に変えてね)
↑感想やらお仕事やら日々の呟きやらなんでもください↑

コメント
非公開コメント

トラックバック

http://tajuujinnkaku.yhei.net/tb.php/738-6438e56f