2012-07-30 11 views
11

Napisałem własne Restful API i zastanawiam się, jak najlepiej radzić sobie z dużą ilością rekordów zwracanych z API.Restful API - obsługa dużych ilości danych

Na przykład, jeśli użyję metody GET do myapi.co.uk/messages/, spowoduje to przywrócenie kodu XML dla wszystkich rekordów komunikatów, które w niektórych przypadkach mogą mieć wartość 1000. To sprawia, że ​​korzystanie z API jest bardzo powolne.

Czy ktoś może zaproponować najlepszy sposób radzenia sobie z tym? Czy w standardzie zwracanie wyników w partiach i określanie wielkości partii w żądaniu?

Odpowiedz

12

Możesz zmienić swój interfejs API, dodając dodatkowe parametry w celu ograniczenia zakresu danych zwracanych przez aplikację.

Na przykład można dodać parametry limit i offset, aby pobrać tylko niewielką część. W ten sposób można dokonać podziału na strony zgodnie z REST. Takie żądanie spowodowałoby pobranie 10 zasobów z kolekcji wiadomości od 21 do 30. W ten sposób można poprosić o konkretnej części ogromnego zbioru danych:

myapi.co.uk/messages?limit=10&offset=20 

Innym sposobem, aby zmniejszyć ładunek byłoby tylko poprosić o pewnych częściach reprezentacji zasobów. Oto jak facebook robi:

/joe.smith/friends?fields=id,name,picture 

Pamiętaj, że podczas korzystania z jednej z tych metod, trzeba zapewnić drogę dla klienta, aby odkryć siebie zasobów. Nie można zakładać, że po prostu spojrzą na parametry i zaczną je zmieniać w poszukiwaniu danych. Byłoby to naruszeniem paradygmatu REST. Podaj im niezbędne hiperlinki, aby tego uniknąć.

Gorąco polecam oglądanie this presentation on RESTful API design przez apigee (screencast nazywa się "Naucz psa do odpoczynku"). Tutaj omawiane są dobre praktyki i zgrabne pomysły na podejście do codziennych problemów.

EDIT: Film został zaktualizowany kilka razy od kiedy pisał tę odpowiedź, można zapoznać się z 3rd edition from January 2013

+0

, który jest bardzo pomocny, dzięki. – LeeTee

+0

Połączona prezentacja jest fajna: ścisła i pouczająca – kiedysktos

+0

@toniedzwiedz Załóżmy, że gdy serwer ma 20 zasobów, klient pobrał 10 pierwszych zasobów z wykorzystaniem limitu 10 i przesunięcia 0 oraz przed wysłaniem kolejnego żądania pobrania pozostałych zasobów, jeśli kilka z nich zostało usuniętych (1 do 5) z serwera, w jaki sposób klient pobiera od 11 do 15 zasobów w tym podejściu? ponieważ w następnym pobraniu klient zażąda od przesunięcia 10, aby pominąć prawo danych od 11 do 15. Czy istnieje inne lepsze podejście do rozwiązania tego problemu, jeśli klient nie śledzi usuniętych zasobów – thavasidurai

Powiązane problemy