ApiのOPTION methodを有効にする
今回は、Http requestを叩いた時に、対象のapiがどのmethodに対応しているのか、
どんなResponseの出力形式に対応しているのかを返す、OPTION methodを叩けるように変更したいと思います。
OPTION METHODを有効にする
現在のapiでOPTIONをつけたHttp requestを叩くと、以下のように504 internal server errorが返ってきます。
curl -iX OPTIONS localhost:8000/flowers/
出力
HTTP/1.1 500 Internal Server Error 以下略...
これを簡単に修正するために、@api_view decoratorを使います。
@api_view decorator
@api_view decoratorを対象のAPIクラスにつけることで、OPTION methodに簡単に対応することができます。
また、@api_viewに対象のApiで受け付けるMETHODを指定することができ、
指定した以外のMETHODを受け付けると、Responseとして、
405 Method Not Allowed
を返すことができます。
では、flowers/views.pyを@api_viewに対応させます。
まず、api_viewをimportします。
from rest_framework.decorators import api_view
後は、@csrf_exemptを外して、@api_viewをつけます。
この時、このapiが対象とするmethod名を代入します。
@api_view(['GET','POST'])
def flower_list(request):
#以下略
@api_view(['GET','PUT','DELETE'])
def flower_detail(request, pk):
#以下略
変更したら、先ほどと同じOPTION METHODを使って、Http Requestをしてみます。
Reponseは以下のようになり、OPTION METHODが有効になっていることが確認できます。
HTTP/1.1 200 OK
Date: Sun, 03 Jun 2018 05:24:58 GMT
Server: WSGIServer/0.2 CPython/3.6.4
Content-Type: application/json
Vary: Accept, Cookie
Allow: OPTIONS, POST, GET
X-Frame-Options: SAMEORIGIN
Content-Length: 170
{"name":"Flower List","description":"","renders":["application/json","text/html"],"parses":["application/json","application/x-www-form-urlencoded","multipart/form-data"]}(MyRestfulApi) MacBook-Pro:flowers shunichiro$
こちらを参考に、知識をまとめています。
初版:2018/6/3