2013-08-14 17 views
19

Mam RESTful API w serwisie internetowym z pewnymi zasobami, takimi jak użytkownicy, posty i tak dalej. Kiedy składam prośbę o listę wpisów (GET/posty), chcę pobrać tablicę postów tylko ze zmniejszoną częścią danych dla każdego posta (tj. Temat, nazwisko autora). Kiedy składam prośbę o konkretny post (GET/posts/42), chcę odzyskać pełną listę pól obiektu pocztowego, w tym dużą treść postu, dodatkowe informacje o liczbie polubień, liczbie komentarzy. Przypuszczam, że istnieje wiele sposobów rozwiązania tego problemu. W moim umyśle, 3 najbardziej oczywiste to:?Sposób określania listy pól zasobów w RESTful żądanie API

  1. Jednoznaczne określenie pól lits na każde żądanie (/ posty fileds = zastrzeżeniem, author_name i /postów/42 pól = zastrzeżeniem, ciało, createaAt, author_name, comments_count, likes_count, etc ...).
  2. Jawnie określa listę pól, tylko jeśli różni się od domyślnej listy pól .
  3. Podaj listę pól, które powinny zostać wykluczone (lub inlcuded) z (do) pól domyślnych, jeśli zestaw żądanych pól różni się od domyślnego.

I co zbudować jasne i przydatne API dla moich klientów. Której powinienem wybrać?

Odpowiedz

16

Wybrałbym opcję 2 IMHO.

Tak więc, jeśli konsument po prostu zażąda adresu URL zasobu (/ posts/42), otrzyma domyślne pola.

Wtedy konsumenci mogą zmieniać odpowiedź domyślną definiując wartości z kwerendy jak: /? Stanowisk/42/boiska tematu, author_name

Ten pracował dobrze dla mnie w przeszłości i jest to, jak niektóre inne dobrze znane API praca, np Facebook

Edytuj: Patrząc wstecz, zmieniam żądanie:/posts/42? Fields = subject, author_name,/post/42 to pola zasobów, a nie pól.

+0

Zgadzam się. Zapewnia niską barierę dostępu, dzięki czemu programiści mogą eksplorować i łatwo zobaczyć pola domyślne, ale wciąż daje elastyczność, aby poprosić o dokładnie to, co chcesz, jeśli trzeba. – theon

+0

Zrobię również opcję (2), ale pozwolę, aby 'fields = *' zawierało wszystkie pola, tak że łatwe jest sprawdzenie kompletnego zestawu (szczególnie dla programisty, który chce się dowiedzieć lub dokładnie sprawdzić, co to jest). –

5

Prowadzono również badania w tym zakresie i wskazano na GraphQL Facebooka jako alternatywę dla żądania spokojnego api z pożądanymi polami. Wciąż jest na bardzo wczesnym etapie, ale wydaje się bardzo obiecujący.

https://facebook.github.io/react/blog/2015/05/01/graphql-introduction.html

EDIT: Reprodukcja z adresem URL:

GraphQL zapytanie jest ciągiem interpretowane przez serwer, która zwraca dane w określonym formacie. Oto przykład zapytania:

{ 
    user(id: 3500401) { 
    id, 
    name, 
    isViewerFriend, 
    profilePicture(size: 50) { 
     uri, 
     width, 
     height 
    } 
    } 
} 

(Uwaga: ta składnia jest nieco inna od poprzednich przykładów GraphQL Niedawno został dokonywania ulepszeń języka.).

I tu jest odpowiedź na to zapytanie.

{ 
    "user" : { 
    "id": 3500401, 
    "name": "Jing Chen", 
    "isViewerFriend": true, 
    "profilePicture": { 
     "uri": "http://someurl.cdn/pic.jpg", 
     "width": 50, 
     "height": 50 
    } 
    } 
} 
Powiązane problemy