J'ai écrit ma propre API Restful et je me demande quelle est la meilleure façon de gérer de grandes quantités d'enregistrements renvoyés par l'API.
Par exemple, si j'utilise la méthode GET
pour myapi.co.uk/messages/
cela ramènera le XML pour tous les enregistrements de message, qui dans certains cas pourraient être des milliers. Cela rend l'utilisation de l'API très lente.
Quelqu'un peut-il suggérer la meilleure façon de gérer cela? Est-il standard de renvoyer les résultats par lots et de spécifier la taille des lots dans la demande?
Vous pouvez modifier votre API pour inclure des paramètres supplémentaires afin de limiter la portée des données renvoyées par votre application.
Par exemple, vous pouvez ajouter des paramètres limit
et offset
pour récupérer juste une petite partie. C'est ainsi que la pagination peut être effectuée conformément à REST. Une demande comme celle-ci entraînerait la récupération de 10 ressources de la collection de messages, du 21 au 30. De cette façon, vous pouvez demander une partie spécifique d'un énorme ensemble de données:
myapi.co.uk/messages?limit=10&offset=20
Une autre façon de diminuer la charge utile serait de ne demander que certaines parties de la représentation de vos ressources. Voici comment Facebook le fait:
/joe.smith/friends?fields=id,name,picture
N'oubliez pas qu'en utilisant l'une de ces méthodes, vous devez fournir au client un moyen de découvrir chacune des ressources. Vous ne pouvez pas supposer qu'ils vont simplement regarder les paramètres et commencer à les changer à la recherche de données. Ce serait une violation du paradigme REST. Fournissez-leur les hyperliens nécessaires pour l'éviter.
Je recommande fortement de visualiser cette présentation sur la conception de l'API RESTful par apigee (le screencast s'appelle "Teach a Dog to REST"). Les bonnes pratiques et les bonnes idées pour aborder les problèmes quotidiens y sont discutées.
EDIT: La vidéo a été mise à jour plusieurs fois depuis que j'ai posté cette réponse, vous pouvez consulter le e édition de janvier 201