Wpis z mikrobloga

#laravel #php

Chciałbym napisać paczkę - klient konkretnego API. Nigdy co prawda paczki nie pisałem, ale pewnie całą logikę upchnę do ServiceProvidera. Natomiast:
1. Załóżmy Allegro REST API. Zmapować funkcjami wszystkie metody API? Widziałem na losowych paczkach na GH że często jest używana magiczna metoda __call. Ale w tym momencie funkcja zwróci obiekt rzutowany z JSONa. A co jeżeli API nie jest JSONowe? Z tym też się wiąże po części kolejne pytanie czyli...
2. Co powinna zwracać taka paczka? Mając dalej Allegro, powinna zwracać jakąś strukturę, która będzie walidowana już po stronie aplikacji (np. z punktu 1 - sparsowany JSON), czy może model? Bo to by było całkiem wygodne dostać obiekty typu Auction czy User, tyle że pewnie powodowało by problemy z kompatybilnością z aplikacją.
3. Walidacja przy zapisywaniu - całość po stronie logiki aplikacji? Ogólnie, w takim wypadku paczka jest tylko głupim wrapperem i tak naprawdę niewiele ułatwia, a przy zmianie API to tragedia, bo trzeba zmieniać w wielu miejscach aplikacji, a nie tylko w paczce.
4. Co z API które są bardzo mocno niestandardowe, tj. nie są ani RESTem ani nie JSON/XML. Jak wtedy postępować?

Byłoby super jakbyście mieli przykład jakiejś dobrze napisanej paczki, która by mogła odpowiedzieć na powyższe pytania. Przykład z Allegro REST API nie jest przypadkowy, jest to nowe API które jeszcze nie ma paczki dla Larwy, a jednocześnie jest na tyle mało skomplikowane (ciągle się rozwija) że chciałbym w przyszłości spróbować napisać do niego paczuszkę.

#programowanie
  • 2
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

Widziałem na losowych paczkach na GH że często jest używana magiczna metoda _call. Ale w tym momencie funkcja zwróci obiekt rzutowany z JSONa. A co jeżeli API nie jest JSONowe?


@aso824: Ale co ma _call() do JSONa?
  • Odpowiedz
@plushy: Może za bardzo uprościłem. Zauważyłem że niektóre paczki to jedynie wrappery, które mają __call() przy metodach. wtedy można zawołać coś w stylu $obj->resources() i wykona się request /resources, który zwraca JSONa, a magiczna metoda od razu go dekoduje i po prostu zwraca. Mimo że to bardziej wrapper, to głównie takie paczki widziałem.
  • Odpowiedz