Symfoware

Symfowareについての考察blog

Falcon URLによる分岐と値の取得

PythonのAPIフレームワークFalconを試しています。
Python + Falconで高速APIサーバーを作成する
APIサーバー Falcon post,headerの値の取得方法

URLによるルーティングと値の取得を試してみます。



URLにパラメーターを含める




http://www.example.com/hello/[変動する値]



という形式で値を指定したい場合、add_routeするときにパラメーターを指定します。
on_getやon_postの最後の引数に、指定したパラメーターが渡されます。


  1. # -*- coding:utf-8 -*-
  2. import json
  3. import falcon
  4. class HelloResource(object):
  5.     
  6.     # getされた時の動作
  7.     def on_get(self, req, res, name):
  8.         
  9.         # 最後の引数nameにURLの一部が代入される
  10.         data = {'result' : name}
  11.         res.body = json.dumps(data)
  12. app = falcon.API()
  13. # URLパラメータを指定
  14. app.add_route("/hello/{name}", HelloResource())
  15. if __name__ == "__main__":
  16.     from wsgiref import simple_server
  17.     httpd = simple_server.make_server("0.0.0.0", 8000, app)
  18.     httpd.serve_forever()




動作確認のためのプログラム


  1. # -*- coding:utf-8 -*-
  2. import json
  3. import urllib2
  4. url = 'http://192.168.1.102:8000/hello/symfo'
  5. response = urllib2.urlopen(url)
  6. # 戻り値を解析
  7. body = response.read()
  8. response.close()
  9. data = json.loads(body)
  10. print(data['result'])




実行すると、ちゃんとURLの一部がパラメーターとして取り出せています。


$ python api_test.py
symfo





もちろん、複数パラメーターを指定できます。


  1. # -*- coding:utf-8 -*-
  2. import json
  3. import falcon
  4. class HelloResource(object):
  5.     
  6.     # getされた時の動作
  7.     def on_get(self, req, res, name, param):
  8.         
  9.         # 最後の引数nameにURLの一部が代入される
  10.         data = {'result' : name + '-' + param}
  11.         res.body = json.dumps(data)
  12. app = falcon.API()
  13. # URLパラメータを指定
  14. app.add_route("/hello/{name}/{param}", HelloResource())
  15. if __name__ == "__main__":
  16.     from wsgiref import simple_server
  17.     httpd = simple_server.make_server("0.0.0.0", 8000, app)
  18.     httpd.serve_forever()




確認用


  1. # -*- coding:utf-8 -*-
  2. import json
  3. import urllib2
  4. url = 'http://192.168.1.102:8000/hello/symfo/ware'
  5. response = urllib2.urlopen(url)
  6. # 戻り値を解析
  7. body = response.read()
  8. response.close()
  9. data = json.loads(body)
  10. print(data['result'])




$ python api_test.py
symfo-ware







任意の文字でマッチさせることもできます。


  1. # -*- coding:utf-8 -*-
  2. import json
  3. import falcon
  4. class HelloResource(object):
  5.     
  6.     # getされた時の動作
  7.     def on_get(self, req, res, a, b, c):
  8.         
  9.         data = {'result' : a + '-' + b + '-' + c}
  10.         res.body = json.dumps(data)
  11. app = falcon.API()
  12. # URLパラメータを指定
  13. app.add_route("/hello/{a}.{b}.{c}", HelloResource())
  14. if __name__ == "__main__":
  15.     from wsgiref import simple_server
  16.     httpd = simple_server.make_server("0.0.0.0", 8000, app)
  17.     httpd.serve_forever()





確認用


  1. # -*- coding:utf-8 -*-
  2. import json
  3. import urllib2
  4. url = 'http://192.168.1.102:8000/hello/t1.t2.t3'
  5. response = urllib2.urlopen(url)
  6. # 戻り値を解析
  7. body = response.read()
  8. response.close()
  9. data = json.loads(body)
  10. print(data['result'])




$ python api_test.py
t1-t2-t3




続きです。
Falcon JSON形式のAPIとしてのカスタマイズ(リクエスト処理前にデータ加工)

関連記事

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

  1. 2016/05/14(土) 21:10:47|
  2. Python
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<Falcon JSON形式のAPIとしてのカスタマイズ(リクエスト処理前にデータ加工) | ホーム | APIサーバー Falcon post,headerの値の取得方法>>

コメント

コメントの投稿


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

トラックバック

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