背景:
如今写Web应用避不开Restful的风头。
在Rest风格的API中,POST
、PUT
、PATCH
都是常用方法,而且都需要在HTTP body中携带业务数据。而Json由于数据结构合理且对数据类型表达清晰等优点,已经成为Web接口通讯中的首选数据表达格式。
如果你的接口选择用Json形式 (Content-Type
为application/json
)跟客户端进行通讯,很遗憾,Tornado框架并不支持其自动解析。是的,不支持。
Tornado现在只支持Content-Type
为application/x-www-form-urlencoded
和multipart/form-data
形式的body解析。
那么如何对request body为json格式的请求自动进行解析呢?
实现:
我们只需要在请求到来之后,body取值之前,判断一下此请求是否为Json形式(选择在RequestHanlder.prepare
中进行处理也是因为其会在get
、post
这些方法之前运行)。如果是,将收到的HTTP body进行一下解码以备后用就可以了:
1 |
|
如果想要强制接口使用者必须使用Json形式的Content-Type,可以:
1 |
|
再进一步。如果嫌每个Handler都写prepare方法麻烦,那么就继承个子类出来,在项目中使用。
1 |
|
总结:
That’s all!
引申:
关于示例代码中涉及到的HTTP状态码,可以参见 Restful HTTP Status Codes