[Python] TornadoでJSON APIを作成する

概要

JSONでリクエストして、レスポンスをJSONで返すAPIをTornadoで作成します。

環境

Python3.9 で tornado v6.1で動作確認しています。

実装

JSONをPOSTできるAPIを実装します。

jsonserver.py
import json import logging import tornado.ioloop import tornado.web logging.basicConfig( format='%(asctime)-15s %(levelname)s %(message)s', level=logging.INFO) class JsonHandler(tornado.web.RequestHandler): async def post(self): # JSON以外のリクエストは400 Bad Requestにする if (self.request.headers.get('Content-Type') != 'application/json'): raise tornado.web.HTTPError(400) # JSONをパースする data = json.loads(self.request.body) # ここで処理を実施する logging.info(f'data = {data}') # レスポンスを書き込む self.write({'result': 'OK'}) def main(): app = tornado.web.Application([ (r'/json', JsonHandler), ]) app.listen(8080) tornado.ioloop.IOLoop.current().start() if __name__ == '__main__': main()

動作確認

まずはサーバを起動します。

サーバを起動する
# 仮想環境を作成 $ python3.9 -m venv test_env $ source test_env/bin/activate $ pip install tornado Collecting tornado Using cached tornado-6.1-cp39-cp39-macosx_10_9_x86_64.whl (416 kB) Installing collected packages: tornado Successfully installed tornado-6.1 # サーバ起動 $ python jsonserver.py

別のウインドウを開いてリクエストを投げてみます。

$ curl -v localhost:8080/json -H 'Content-Type: application/json' -d '{
  "data": {
    "date": "2021-04-18"
  }
}'
* Trying ::1…
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0) 
> POST /json HTTP/1.1
> Host: localhost:8080
> User-Agent: curl/7.64.1
> Accept: /
> Content-Type: application/json
> Content-Length: 44
*   upload completely sent off: 44 out of 44 bytes
< HTTP/1.1 200 OK
< Server: TornadoServer/6.1
< Content-Type: application/json; charset=UTF-8
< Date: Sun, 18 Apr 2021 10:38:03 GMT
< Content-Length: 16
<
* Connection #0 to host localhost left intact
{"result": "OK"}* Closing connection 0    
ログの確認

「[Python] TornadoでJSON APIを作成する」への1件のフィードバック

コメントする