Nous avons une API reposante sur HTTP. Parmi les autres clients, nous avons également des clients d'appareils mobiles (par exemple, iphone). Le problème est qu'il existe plusieurs applications iPhone dans différentes versions (1.0, 2.0). Parce qu'ils sont distribués, nous n'avons aucun contrôle sur la version de l'application qui nous appelle.codage du versionnement des appareils mobiles pour le serveur REST Api
Pour identifier l'application version sur côté serveur je vois les options suivantes:
-
dispositif
- devez ajouter le paramètre d'URL (par exemple /foo?iphone-app-version=1.0): Un peu dégueu, mais bon chose est que je peux le voir toujours sur server-logs (URL est toujours connecté)
- nous authentifions api-clients avec digestion HTTP. Nous pourrions encoder la version de l'application à l'intérieur du nom d'utilisateur (par exemple iphone_1_0): C'est une bonne chose qu'il soit enregistré dans les journaux du serveur, mais ne fonctionne que pour les ressources qui sont exposées en tant que digest HTTP.
- Le périphérique doit utiliser un en-tête HTTP personnalisé, par ex. X-IPHONE-APP-VERSION: À mon avis l'approche la plus propre, mais nous ne consignons pas les en-têtes HTTP dans les journaux du serveur (pour le bruit du journal, il est désactivé). Donc, l'analyse plus tard n'est pas possible.
Avez-vous une approche préférée ou d'autres alternatives?
EDIT: Avec les versions précédentes, je ne parle pas d'api-versioning/content-negotiation. C'est la version de l'appareil mobile.
il existe déjà un concept de versionnement (à la fois via les en-têtes et perma-link). Ce dont j'ai besoin, c'est d'identifier la version de l'application de l'appareil mobile. Cette version est différente de la version api-server. La motivation est de savoir quelles applications/versions sont utilisées par les utilisateurs finaux. –
@manuel N'est-ce pas ce à quoi sert l'en-tête de l'agent utilisateur? –
oui, cela pourrait tenir (http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.43).Jusqu'à présent, j'ai seulement vu cet en-tête pour identifier les "constructeurs de connexion" (par exemple, firefox, client http-commons). Je vais jeter un coup d'oeil ce que l'iPhone d'entrée d'utilisateur-agent envoie actuellement. Peut-être que je vais juste ajouter l'app-version-fingerprint (ce serait similaire à l'en-tête X-IPHONE-APP mentionné). L'inconvénient est que je ne peux pas le voir à l'intérieur des journaux de modèle de production car il n'est pas inclus dans permalink. Donc, toutes les statistiques des journaux passés ne fonctionneront pas, seuls les journaux d'en-tête temporairement activés s'afficheront. –