django-repos-cadre: api de gestion des versions
afin de googler autour il semble que le consensus général est que le fait d'intégrer les numéros de version dans le RESTE de l'Uri est une mauvaise pratique et une mauvaise idée.
même TELLEMENT il y a de fervents promoteurs de l'appui de cette.
par exemple, Les meilleures pratiques pour les API de contrôle de version?
Ma question est sur la façon d'accomplir la solution proposée de l'utilisation de l'en-tête accept /de la négociation de contenu dans django-reste-cadre pour accomplir cette tâche.
Il ressemble à la négociation de contenu dans le cadre,
http://django-rest-framework.org/api-guide/content-negotiation/
est déjà configuré pour automatiquement rendement prévu des valeurs basées sur les types MIME acceptés. Si je commencer à utiliser l'en-tête Accept pour les types personnalisés, je vais perdre cet avantage de le cadre.
Est-il une meilleure façon de le faire dans le cadre?
Vous devez vous connecter pour publier un commentaire.
Une façon de le faire est d'avoir la gestion des versions spécifié en tant que partie du type de média.
C'est ce que GitHub actuellement pour leur API.
Vous pouvez également inclure les paramètres de type de support dans votre accepter les en-têtes, par exemple,
Accept: application/json; version=beta
, qui réussira match contreJSONRenderer
. Vous pouvez ensuite le code de votre point de vue à se comporter différemment en fonction du type de support, voir ici.Il y a beaucoup de différents modèles pour la gestion des versions dans les Api, et je ne voudrais pas dire, il y a un grand consensus autour de la bonne approche encore, mais ce serait une possibilité raisonnable.
Mise à jour Jan 2015: une Meilleure gestion des versions seront entrant dans la version 3.1.0. Voir [ce pull request]
Mise à jour en Mars 2015,: les Docs pour la gestion des versions de l'API sont maintenant disponibles.
(https://github.com/tomchristie/django-rest-framework/pull/2285) pour plus de détails.
Mise à JOUR:
gestion des versions est maintenant correctement pris en charge.
Il y a quelques réponses à partir de votre lien:
Nous avons donc profité de cette approche, en plus de permettre aux clients de spécifier la version en-tête de la requête (X-Version), voici comment nous avons procédé:
Structure latérale de l'API app:
projet urls.py:
api app niveau urls.py:
niveau de version urls.py
créer un middleware pour passer le code, la modification de la path_info, veuillez noter qu'il y est une mise en garde de l'espace de nom ("api") défini dans le projet de l'url de niveau n'est pas flexible et doit être connue dans le middleware:
Exemple d'url:
HyperlinkedRelatedField
etc). Des idées?HyperlinkedRelatedField
je suppose que ton problème serait le lien va à la version par défaut si vous avez spécifié une version différente?Accept
en-tête de la méthode de gestion des versions, de sorte que l'Url ne change pas d'un iota.HyperlinkedRelatedField