Symfoware

Symfowareについての考察blog

Python + Falconで高速APIサーバーを作成する

Pythonで高速なAPIサーバーを構築するためのフレームワーク
Falcon
http://falconframework.org/

インストールと簡単なサンプルプログラムの作成を試してみます。



インストール



easy_installでインストールしました。


$ sudo easy_install falcon




インストール中、Cythonがインストールされていないという警告が表示されました。


Searching for falcon
Reading https://pypi.python.org/simple/falcon/
Best match: falcon 1.0.0rc1
Downloading https://pypi.python.org/packages/bf/78/e4dd0db87c5c1ada38c04c2fc5a3cc3d8f98b461753e2272c85478e15972/falcon-1.0.0rc1.zip#md5=9e4ea418f1772e2e0ad008feb8679a0e
Processing falcon-1.0.0rc1.zip
Writing /tmp/easy_install-4tUb6C/falcon-1.0.0rc1/setup.cfg
Running falcon-1.0.0rc1/setup.py -q bdist_egg --dist-dir /tmp/easy_install-4tUb6C/falcon-1.0.0rc1/egg-dist-tmp-eaYcmH

NOTE: Cython not installed. Falcon will still work fine, but may run a bit slower.




Cython、調べてみるとPythonを高速化するライブラリのようです。
追加でインストールしておきました。


$ sudo easy_install cython








サンプルプログラム



サーバー側のプログラムは、こちらを参考にさせていただきました。
Falconで光速のWeb APIサーバーを構築する


  1. # -*- coding:utf-8 -*-
  2. import json
  3. import falcon
  4. class HelloResource(object):
  5.     
  6.     # getされた時の動作
  7.     def on_get(self, req, res):
  8.         msg = {
  9.             "message": "Welcome to the Falcon"
  10.         }
  11.         res.body = json.dumps(msg)
  12. app = falcon.API()
  13. app.add_route("/", HelloResource())
  14. if __name__ == "__main__":
  15.     from wsgiref import simple_server
  16.     httpd = simple_server.make_server("127.0.0.1", 8000, app)
  17.     httpd.serve_forever()





APIを使って見るサンプルはこんな感じになります。


  1. # -*- coding:utf-8 -*-
  2. import json
  3. import urllib2
  4. response = urllib2.urlopen('http://localhost:8000')
  5. body = response.read()
  6. response.close()
  7. data = json.loads(body)
  8. print(data['message'])





実行してみると、ちゃんと応答を解析することが出来ました。


$ python api_test.py
Welcome to the Falcon








GETパラメーター



これだけだと味気ないので、GETパラメーターを送信してみます。
クライアントから送信されたGETパラメーターを取り出すには、


  1. req.get_param('パラメーター名')



とすれば良いようです。


  1. # -*- coding:utf-8 -*-
  2. import json
  3. import falcon
  4. class HelloResource(object):
  5.     
  6.     # getされた時の動作
  7.     def on_get(self, req, res):
  8.         
  9.         # クエリーパラメーターの取得
  10.         name = req.get_param('name')
  11.         
  12.         msg = {
  13.             "message": "Hello, " + name
  14.         }
  15.         res.body = json.dumps(msg)
  16. app = falcon.API()
  17. app.add_route("/", HelloResource())
  18. if __name__ == "__main__":
  19.     from wsgiref import simple_server
  20.     httpd = simple_server.make_server("127.0.0.1", 8000, app)
  21.     httpd.serve_forever()





こんなプログラムで動作を確認してみます。


  1. # -*- coding:utf-8 -*-
  2. import json
  3. import urllib2
  4. response = urllib2.urlopen('http://localhost:8000?name=symfo')
  5. body = response.read()
  6. response.close()
  7. data = json.loads(body)
  8. print(data['message'])




GETパラメーターが受け取れました。


$ python api_test.py
Hello, symfo




続きです。
APIサーバー Falcon post,headerの値の取得方法
関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2016/04/27(水) 22:15:43|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Ubuntu 16.04をUSBメモリーからインストールする | ホーム | Play Framework 2.5.0をUbuntu 14.04 + OpenJDKで動かす>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1871-6f6c9bb5
この記事にトラックバックする(FC2ブログユーザー)