概要
JSONでリクエストして、レスポンスをJSONで返すAPIをTornadoで作成します。
環境
Python3.9 で tornado v6.1で動作確認しています。
実装
JSONをPOSTできるAPIを実装します。
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件のフィードバック