・クライアント:vue+axios
・APIサーバ:tornado json(Python)
の構成での連携するときの話。
先ず、「tornado json」 を使っている人は少ないかもしれませんが
これがなかなか使い易い。
[index.py]
import tornado.ioloop from tornado_json.routes import get_routes from tornado_json.application import Application def main(): import hoge routes = get_routes(hoge) application = Application(routes=routes, settings={}, generate_docs=True) application.listen(8088) tornado.ioloop.IOLoop.instance().start() if __name__ == '__main__': main()
APIサーバとしてはこの10行程度で動きます。
そして下記の様にクラスを追加するだけで自動でルーティングしてくれるのが便利。
(クラス名を基にしてpathを自動生成)
[hoge/api.py]
from tornado_json.requesthandlers import APIHandler from tornado_json import schema class Greeting(APIHandler): @schema.validate( output_schema={"type": "string"}, output_example="Greetings, Named Person!" ) def get(self, fname, lname): return "Greetings, {} {}!".format(fname, lname)
上記の例では http://~~~/api/greeting/Taro/Suzuki/
みたいな感じでGETアクセスできます。
ここの「Taro」はfname、「Suzuki」はlnameに入りますので
後はよしなにしていくという次第。
実際のWEBサーバとしてはnginxと組み合わせて調整していかなければなりませんが
処理が早くて開発し易い環境の一つだと思います。
尚、jwtの取り出しは単純にaxiosから送られてきた通信ヘッダから
「Authorization」を取り出すだけ。
auth = self.request.headers.get("Authorization", None)
しかしここには「Bearer ****(token)***」のように入いっているので
auth.split() をしなければならない。(なんかダサい)
取り出したjwtは下記の様にしてデコードします。
ちなみに このTornadoサーバは元Google社員が立ち上げたFriendFeedによって開発されたのですが、現在はFacebook に吸収されてオープンソース化されています。
そして、このjson tornado関連の有志は5人と少なく、気長にアップデートしている感じです。
auth = self.request.headers.get("Authorization", None)
しかしここには「Bearer ****(token)***」のように入いっているので
auth.split() をしなければならない。(なんかダサい)
取り出したjwtは下記の様にしてデコードします。
import jwt
algorithms = 'HS256'
try:
user = jwt.decode(token, self.secret, algorithms=self.algorithms)
except jwt.ExpiredSignatureError:
# Signature has expired
return self.error_object("Signature has expired")
ちなみに このTornadoサーバは元Google社員が立ち上げたFriendFeedによって開発されたのですが、現在はFacebook に吸収されてオープンソース化されています。
そして、このjson tornado関連の有志は5人と少なく、気長にアップデートしている感じです。