zestedesavoir / zds-site

Cœur du projet technique de Zeste de Savoir
https://zestedesavoir.com
Other
268 stars 161 forks source link

API - Les adresse en PATCH ne semble pas fonctionner #3765

Open DevHugo opened 8 years ago

DevHugo commented 8 years ago

Bonjour,

Quand j'effectue les requêtes suivantes en patch:

J'ai l'erreur python suivante retourné par le serveur:

Internal Server Error: /api/mps/3/
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/django/core/handlers/base.py", line 132, in get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib/python2.7/site-packages/django/views/decorators/csrf.py", line 58, in wrapped_view
    return view_func(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/django/views/generic/base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 466, in dispatch
    response = self.handle_exception(exc)
  File "/usr/lib/python2.7/site-packages/rest_framework/views.py", line 463, in dispatch
    response = handler(request, *args, **kwargs)
  File "/usr/lib/python2.7/site-packages/rest_framework/generics.py", line 292, in patch
    return self.partial_update(request, *args, **kwargs)
  File "/usr/lib/python2.7/site-packages/rest_framework/mixins.py", line 78, in partial_update
    return self.update(request, *args, **kwargs)
  File "/usr/lib/python2.7/site-packages/rest_framework/mixins.py", line 68, in update
    serializer = self.get_serializer(instance, data=request.data, partial=partial)
  File "/usr/lib/python2.7/site-packages/rest_framework/generics.py", line 111, in get_serializer
    return serializer_class(*args, **kwargs)
TypeError: 'NoneType' object is not callable
GerardPaligot commented 8 years ago

Toutà fait. L'API de Zeste de Savoir n'a jamais été compatible avec le verbe PATCH. Pire que ça, PUT permet la modification partielle.

DevHugo commented 8 years ago

Alors, il faut le supprimer de la documentation :) !

https://zestedesavoir.com/api/#!/membres/Member_Detail_Api_PATCH

GerardPaligot commented 8 years ago

@DevHugo Pour bien faire, il faudrait supporter ce verbe mais je suis jamais arrivé à le supprimer de la documentation.

DevHugo commented 8 years ago

"enabled_methods" dans la conf sert uniquement à afficher ou pas le bouton pour tester mais ne cache pas les méthodes précisés dans swagger.

Swagger se base sur les mixins quand il voit UpdateAPIView, il comprend que tu veux faire du patch et du put. Comme indiqué dans la documentation de django-rest-framework.

Le workaround qu'on avait trouvé à l'époque était de précisé les méthodes http supportés comme cela:

class MemberDetailAPI(RetrieveUpdateAPIView):
    """
    Profile resource to display or update details of a member.
    """
    http_method_names = ['put']

Source: