On 22.11.2012 12:21, Wojtek K wrote:
> Wystawianie modelu do API faktycznie jest nie do obrony, widać sporo
> kłopotów na horyzoncie. Ale jeszcze nie jestem do końca przekonany do
> contract-first. Jeżeli wystawię bibliotekę z API, odseparowaną od
> modelu, to myślę, że takie rozwiązanie chyba daję radę?
Zanim robiłem WS w javie, robiłem WS w C#. W świecie .NETa
contract-first było rzadko spotykane. Robiłem code-first. Po kilku
miesiącach pieprzenia z nieczytelnym (generowanym) wsdl'em, ze zmianami
w postaci zamiana miejscami (numer linii) property w klasie C# i
rozpieprzenie z tego powodu komunikacji, nie byłem za specjalnie
zadowolony z tego rozwiązania. Mój jedyny argument przeciw code-first
był taki, że wsdle są obrzydliwe i nie chce mi się ich pisać ręcznie.
A potem zmieniłem technologię i kolega od Javy pokazał mi zajebiście
prostego, czystego wsdl'a, który nawet taka pała jak ja, jest w stanie
zrozumieć. I nagle okazało się, że moim głównym problemem były właśnie
biblioteki generujące wsdle, że łatwiej jest dobrze zdefiniować kontrakt
ręcznie, najpierw (zwłaszcze że myślisz o kontrakcie, a nie
implementacji pod spodem), niż robić code-first.
Później się co prawda okazało, że jeszcze przyjemniej jest zrobić
RESTfull JSON over HTTP, niż bawić w xml'a, więc WSDLe wystawiamy tylko
dla komunikacji zewnętrznej w korpo (czyli nie publicznej - tam gdzie
inni dostawcy jak nie dostaną kontraktu, to albo nakryją się nogami,
albo zaczną zrzucać na nas własny brak jakichkolwiek testów). Dla całej
reszty świata dobry JSON + przykłady, są zdecydowanie przyjemniejsze w
konsumpcji.
--
Jakub Nabrdalik
blog.solidcraft.eu