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

このエントリーをはてなブックマークに追加