2016-11-18 2 views
1

Lors de la création d'une API REST, les champs ajoutés à une réponse dans la version 2 doivent-ils renvoyer la réponse d'un appel au point de terminaison de la version 1?Les champs ajoutés doivent-ils être visibles dans les versions d'API inférieures?

À titre d'exemple, étant donné le point de terminaison api/v1/users/1, la réponse pourrait être:

{ 
    "first_name":"david" 
} 

Puis v2, étant donné le point final api/v2/users/1, la réponse pourrait être mis à jour pour être:

{ 
    "first_name":"david", 
    "last_name":"smith" 
} 

Would Est-ce une mauvaise pratique d'avoir la même réponse retournée d'un appel au point de terminaison v2 retourné sur un appel au point de terminaison v1? Ma première pensée est oui, mais là encore, je ne vois pas de problème, car ce changement ne serait pas rompu. En guise de remarque, la question se posait d'essayer de comprendre comment construire une API avec version en utilisant Laravel et Eloquent. Je ne peux pas facilement voir un moyen d'accomplir cela avec Eloquent, et je devrais mapper le modèle à un modèle versionné, ou écrire tous mes dépôts avec QueryBuilder pour contrôler les champs. Marqué comme Laravel et Eloquent puisque ce sont les cadres spécifiques que j'utilise et que je veux voir si quelqu'un a une solution en utilisant ceux-ci, mais la question est pour api design en général.

Répondre

1

Si vous ajoutez simplement des propriétés, vous n'avez probablement pas besoin de versionner votre API. Les clients bien élevés ignoreront toutes les nouvelles propriétés. Dans la plupart des cas, l'ajout de propriétés est considéré comme un changement sans rupture.

Modifier votre réponse API V1 pour inclure les nouvelles propriétés et ajouter un V2 qui ressemble exactement à V1 est stupide. Ne fais pas ça. Il n'y a pas de valeur dans deux versions qui se ressemblent.

Si vous effectuez des modifications de rupture, la mise à jour de l'API V1 pour avoir ces modifications est également une mauvaise idée et vous ne devriez pas faire cela.

Je ne peux pas parler à Laravel et Eloquent.