![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Zabieram się do wystawienia API do istniejącej już aplikacji, API będzie zarówno pod appkę jak i strony www.
Chciałbym aby to było dobre, RESTowe, użyteczne i elastyczne API, a nie kilka sztywnych metod. Jakieś doświadczenia jak zbudować dobre API, z którego byście sami z przyjemnością korzystali? Kilka ważnych aspektów: - autoryzacja - wersjonowanie - spójny format błędów - kontrola nad zwracanymi danymi (zarówno wybór pól jak i relacji) - limitowanie i paginacja - możliwość generowanie zaawansowanych metod typu find, search (szukanie po polach za pomocą różnych warunków, które można użyć w where()) - dokumentacja (generator?) Pod większością względów podoba mi się API wFirmy (system do faktur): https://doc.wfirma.pl/#h2-Komunikacja-h3-Ko...nie-zapyta-find Poza troszkę zagmatwanym formatem danych, zwracanych przez te API i brakiem wersjonowania to jest to dla mnie wzór, który chciałbym osiągnąć. Zastanawiam się czy znajdę gotowy szkielet takiego API czy muszę to implementować wszystko samemu, na poziomie kontrolerów i repozytoriów? W L5.5 jest kilka dodatków typowo pod API np. Responses ale i tak wciąż jest sporo pracy. Ten post edytował markonix 26.11.2017, 02:21:48 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Tak więc ostatecznie skorzystałem z Dingo, ma on tam dokumentowanie ale zgodnie z sugestią poszedłem w Swaggera, szkoda tylko, że trzyma się go na gałęzi 2.0.
Jeżeli chodzi o queries API to ciągle stoję w miejscu. Nie potrafię znaleźć odpowiedniego narzędzia. W pewnym momencie myślałem, że nie będę musiał nawet go szukać bo mam go pod nosem bo używam Repository Pattern i biblioteki: https://github.com/andersao/l5-repository#u...requestcriteria No i mówię świetnie, wystarczy takie coś:
No i początkowo pełny entuzjazmu patrzę i faktycznie działa.. with fajnie, filter w porządku, search już się zaczynają schody, jakieś dziwne podejście do wyszukiwania po wielu polach, które musisz jeszcze zadeklarować tak jakby nie można było szukać po dowolnym atrybucie i w jakikolwiek sposób (nie tylko = ale też < > != itd.) Z sortowaniem też słabo bo nie da się posortować wg dwóch pól, a semantyka średnia. Brak limit(). Żeby limitować muszę już zamiast all() użyć paginate(), który jest nawet spoko bo dodaje linki prev/next, sumę itp. ale to już zmienia mocno format danych, co jest przesadą jakbym chciał np. ostatnie 5 rekordów posortowanych wg daty. Próbowałem też inne ale większość wymaga aby przekazywać jako argumenty QueryBuilder'a. Częściowo dla mnie zrozumiałe ale nie bardzo bym chciał pomijać repozytoria. Czy u Ciebie da się używać repozytory pattern i Twojej biblioteki? Jakoś w przykładach u Ciebie nie do końca widzę jaką metodę wstrzykiwania przyjąłeś. Chyba się udało z biblioteką: https://github.com/marcelgwerder/laravel-api-handler
Można używać repo jednocześnie, i kontrolery względnie zostają czyste. Biblioteczka też widzę że jest od czasu do czasu aktualizowana. Nawet jeszcze ładniej się da jak się utworzy własną metodę:
Ten post edytował markonix 16.12.2017, 12:11:05 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 16:40 |