Dokumentacja API RESTful [zamknięta]

Obecnie pytanie to nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi będą poparte faktami, referencjami lub wiedzą specjalistyczną, ale to pytanie będzie prawdopodobnie wywoływało debatę, argumenty, ankiety lub rozszerzoną dyskusję. Jeśli uważasz, że to pytanie można poprawić i ewentualnie ponownie otworzyć, odwiedź Pomoc centrum dla wskazówek. Zamknięte 8 lat temu .

Wkrótce zaprojektuję RESTful API, więc muszę go opisać, aby umożliwić innym osobom rozpoczęcie implementacji klientów korzystających z niego.

Rozejrzałem się trochę, ale niestety, nie znalazłem żadnej znormalizowanej formy opisywania internetowych usług RESTful. Szukam czegoś takiego jak JavaDoc, chociaż nie musi być generowany z żadnego rodzaju kodu. Nie mówię też o czymś takim jak WADL, raczej chcę mieć jakąś czytelną dla człowieka dokumentację, którą mogę rozdać.

Ze względu na charakter Usług Internetowych RESTful, standaryzacja dokumentacji powinna być dość łatwa. Powinien po prostu wymienić dostępne zasoby, odpowiednie Uri, dozwolone metody, typy treści i opisać dostępne akcje. Masz jakieś sugestie?

Z góry dzięki & Pozdrawiam
Author: jldupont, 2009-12-27

4 answers

Ze względu na charakter RESTful web-based usługi, powinno być dość łatwe do standaryzacja dokumentacji. Powinno wystarczy wymienić dostępne zasoby, odpowiednie Uri, dozwolone metody, content-rodzaje i opis dostępne działania. Czy masz jakieś sugestie?

To jest absolutnie zły sposób na dokumentowanie usług odpoczynku.

JEDEN URI do rządzenia nimi wszystkimi

Nigdy nie należy wyliczać Uri zasobów, ponieważ to zachęci klienta do zakodowania tych Uri do kodu klienta. Powoduje to niepotrzebne sprzężenie między Klientem a serwerem. Uri powinny być wykrywane na podstawie nawigacji z głównego Uri usług. Root URI jest jedynym URI, który powinien być udokumentowany. Dokumentacja powinna skupiać się na opisaniu, jakie informacje i linki znajdują się w zwracanych reprezentacjach. Jeśli zaczniesz od reprezentacji zwracanej z głównego URI, możesz opisać media wpisz i jakie są linki, które mogą być zawarte w tym dokumencie.

Alias twojego Uri

Ważne jest, aby użyć pewnego rodzaju aliasu, aby utworzyć warstwę podziału między Klientem a serwerem. Jeśli zastosujesz standard atom: link do definiowania linków, atrybut rel stanie się identyfikatorem. Istnieją jednak inne sposoby definiowania linków, jak na przykład sposób osadzania obrazów w html. Znacznik obrazu może mieć Id i href. Znacznik Id powinien być używany do określ obraz, dla którego chcesz uzyskać dostęp do adresu URL.

Typy mediów definiują Twoje API

Efektem końcowym jest zdefiniowanie wszystkich punktów końcowych w interfejsie API w kontekście jakiejś reprezentacji. Pełne API jest definiowane przez zestaw zwracanych reprezentacji i łącza, które je łączą.

Więc możesz zapytać, jaka jest różnica? Dlaczego po prostu nie utworzyć listy punktów końcowych? Oto kilka powodów,

Zmienna przestrzeń URI

Ponieważ te łącza są dostępne dla klienta za pomocą aliasu, dzięki czemu cała struktura adresu URL witryny może być całkowicie zmienna bez wpływu na klienta. To sprawia, że wszystkie niekończące się pytania "Jaki jest najlepszy sposób na strukturę mojego hierarchicznego adresu URL" są praktycznie nieistotne. Możesz spróbować w jeden sposób, a jeśli to nie zadziała, po prostu go zmień, nie złamiesz żadnego kodu klienta ani nie będziesz musiał zmieniać żadnej dokumentacji!

Dynamiczny rozkład

To nie tylko część ścieżki URI, która możesz się zmienić. Możesz też zmienić gospodarza. Wyobraź sobie, że Twoja aplikacja zaczyna uzyskiwać o wiele więcej wykorzystania niż się spodziewałeś, możesz łatwo zmienić host wszystkich zasobów obrazu lub wideo, aby wskazać inny serwer. Możesz nawet zapewnić proste równoważenie obciążenia, zwracając różne hosty. Ponieważ interfejsy API RESTful są bezpaństwowe, tak naprawdę nie ma znaczenia, który serwer odpowie na żądanie. Ta funkcja jest przydatna w tak wielu scenariuszach: przenoszenie materiałów HTTPS na serwer dedykowany, rozmieszczenie geograficzne żądań w oparciu o lokalizację klienta, pionowe partycjonowanie funkcji aplikacji na różnych serwerach.

Explicit protocol

To, że reprezentacja może zwrócić link, nie oznacza, że zawsze będzie. Serwer może zwracać tylko te linki, które są dozwolone na podstawie bieżącego stanu zasobów. Może to być bardzo pomocne, gdy istnieje określony protokół, którego należy przestrzegać podczas interakcji z zasobem serwera. Klient kod nie musi rozumieć zasad protokołu, może po prostu przedstawić użytkownikowi linki, które zostały udostępnione przez serwer.

Nie można autogen ciekawych rzeczy

Powodem, dla którego większość zautomatyzowanych działań związanych z dokumentowaniem usług REST nie jest skuteczna, jest to, że jednolity interfejs eliminuje potrzebę dokumentowania łatwych rzeczy. Gdy zrozumiesz HTTP (zobacz RFC2616), zrozumiesz całą mechanikę API. Wszystko, co pozostało, to naprawdę interesujące informacje specyficzne dla domeny, których nie można wygenerować.

Spójrz na Jasną Stronę, dokumentacja powinna być znacznie krótsza. Każdy dodatkowy dostępny czas należy poświęcić na dostarczenie przykładów poruszania się po interfejsie API dla typowych scenariuszy.

 67
Author: Darrel Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-28 15:36:43

Nie ma standardu, tylko otwarta debata. W InfoQ znajduje się ciekawy artykuł: opisujący Aplikacje RESTful .

 12
Author: Mirko N.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-27 16:14:46

Jeśli używasz czegoś takiego jak JAX-RS możesz użyć JavaDoc implementacji jako referencji. Albo skanowanie adnotacji i generowanie jej automatycznie nie powinno być zbyt trudne, choć nie znam konkretnej implementacji.

 1
Author: Eran Medan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-27 16:14:12

Jeśli używasz wzorca MVC, adres URL jest zwykle reprezentowany jako:

Example.com/class/function/ID

Są to pragmatyczne dostępne informacje, co oznacza, że nadal możesz używać JavaDoc i być w stanie udokumentować podejście RESTful, ponieważ każda część adresu URL jest połączona z samym kodem źródłowym.

 -8
Author: Luca Matteis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-27 16:05:23