Dlaczego nie ma obsługi typu WSDL dla interfejsu API sieci Web?


33

Właśnie zaczynam pracę z .Net WebApi i od razu zauważam, że nie ma umowy określającej, jak interfejs API wygląda i powinien zostać wykorzystany (Żądanie / Odpowiedzi z każdej Akcji), zwykle jest to forma WSDL dla WCF / Soap.

Wydaje mi się, że jest to coś, co byłoby bardzo cenne i znacznie ułatwiło życie konsumentom twojego API.

Czy istnieje powód, dla którego go nie ma? Czy istnieje jakiś paradygmat programowania lub zasada, o której nie wiem? Czy istnieje sposób, w jaki mógłbym go stworzyć?


3
Powiązane: Dlaczego ludzie uważają, że SOAP jest przestarzałe? . tl; dr: Soap i WSDL są tak 2007, a REST jest obecnie bombą.
Robert Harvey

Wiele miejsc, w których udostępniono niektóre powszechnie używane interfejsy API, zwykle ma biblioteki dla różnych języków, których można używać do korzystania z ich interfejsów API. W przypadku miejsc, które go nie zapewniają, zwykle istnieje projekt open source. Na przykład twilio dla C # tutaj, github.com/twilio/twilio-csharp .
Pete,

1
@RobertHarvey: SOAP nie jest przestarzałe , ale dyskredytowane : nie musi być oficjalnie Nie zalecane przez tego, kto go stworzył dla tych, którzy wiedzą, że go polecają.
Mason Wheeler,

Odpowiedzi:


23

MYDŁO, ODPOCZYNEK I TWÓRCZOŚĆ LUDZI

SOAP potrzebuje dokumentu opisowego, takiego jak WSDL, ponieważ każdy zasób może być wykorzystany z różnymi komunikatami, w protokole nie ma definicji ograniczeń związanych z możliwymi nazwami / komunikatami, którymi można manipulować zasobem.

Na przykład w SOAP usługa sieci Web, która pozwala klientom manipulować użytkownikiem, może ujawnić operację tworzenia użytkownika w wielu różnych wiadomościach, takich jak:

addUser
createUser
insertUser

Oczywiście to tylko kilka przykładowych wiadomości, ponieważ widziałem wiele zabawnych nazw metod serwisów internetowych. Tam są naprawdę kreatywni ludzie.

Z drugiej strony, jeśli ujawniasz swój podstawowy system za pomocą interfejsu API, który naprawdę przestrzega zasad REST, klient musi tylko wiedzieć, że masz zasób o nazwie Użytkownicy, ponieważ istnieje 99% szans, że możesz utworzyć użytkownika w tym droga

POST /Users

Dzieje się tak w przypadku każdej operacji, którą chcesz udostępnić za pomocą SOAP lub REST interfejsu API sieci Web.

Pomimo tego, że jest SOAP, jest protokołem, który ogranicza to, co możesz, a czego nie możesz zrobić, i jest REST architekturą stylu, która pozostawia wiele otwartych punktów, jak to robić. Podejmowane są wysiłki w celu zdefiniowania konwencji, w jaki sposób udostępniać i korzystać z interfejsu API REST.


OPIS RESTU WEB API

W dziedzinie opisu REST interfejsu API mogę przytoczyć Swagger . Nie jest to próba utworzenia pliku WSDL typu REST interfejsu API sieci Web, ale dobra próba utworzenia otwartego standardu opisywania interfejsu REST interfejsu API sieci Web.

Swagger to specyfikacja i pełna implementacja frameworka do opisu, produkcji, konsumpcji i wizualizacji usług sieciowych RESTful.

Często używam Swaggera i bardzo go uwielbiam, głównie dlatego, że interfejs użytkownika Swagger, który pozwala wygenerować ładną konsolę na żywo i dokumentację dla interfejsu WWW.

Istnieje wiele implementacji Swagger dla większości języków: C #, Java, Python, Ruby itp.

Jeśli używasz interfejsu API sieci Web platformy ASP .NET, istnieje kilka projektów do automatycznego wygenerowania specyfikacji Swagger, takich jak Swagger.NET


GENEROWANIE KLIENTÓW DO ODPOCZYNKU INTERNETOWEGO API

Ponieważ ograniczenia REST, takie jak ograniczony zestaw czasowników (GET, POST, PUT, DELETE itp.), Nie są tak trudne do wygenerowania biblioteki klienta do REST interfejsu API sieci Web.

Projekty takie jak WebApiProxy mogą z łatwością generować klientów w języku C # i JavaScript.


KONWENCJE DOTYCZĄCE RESTOWANIA API WEB

Aby ułatwić nam życie jako programistom, dobrze jest zdefiniować niektóre konwencje tego, jak zachowa się nasza REST interfejsu API w sieci. Najlepszym wysiłkiem, jaki znam w tej dziedzinie, jest bardzo dobry ebook Apigee - Web Api Design . E-book nie jest próbą stworzenia Biblii ani mantry o tym, jak zaprojektować API, ale raczej zbiór konwencji zaobserwowanych w dużych aplikacjach internetowych REST api, takich jak Twitter, Facebook, Linkedin, Google itp.


Dołącz WADL, uważam, że DOKŁADNIE to, czego potrzebujemy, aby firma RESTfull / JSON api została określona ... a jednocześnie jest o wiele rozsądniejsza niż WSDL. Swagger jest świetny do konsumpcji, do generowania szkieletu, ale w moim umyśle znajduje się na niższym poziomie. WADL -> Swagger -> Code Skeleton. WADL pasuje również do istniejącego ekosystemu, co jest koniecznością dla programistów korporacyjnych.
JM Becker

3
Właściwie jestem ... trochę oszołomiony. ODPOWIEDZI GETsą prostsze, tak. Ale wiedząc, co czasowniki są prawdopodobnie wspierany nie oznacza, że można wchodzić w interakcje z API w ogóle . Nadal nie mamy wiedzy na temat schematu ani domeny. Prawdziwa odpowiedź, jeśli mamy być szczerzy, jest to, że nasze zmiany usług nie jawnie łamać umowy z integracji, gdy nie ma kontraktu (WSDL) do złamania. A w Internecie chcemy wolności, aby zmieniać rzeczy chcąc nie chcąc, bez poczucia winy i tak dalej. Ale i tak musimy czytać dokumenty API i eksperymentować * Tak więc w większości się z tym
pogodziliśmy

5

W skrócie, ponieważ SOAP został zaprojektowany tak, aby był opisowy: Punkt końcowy SOAP zwykle zawiera wsdl, który opisuje, jakie operacje udostępnia i jak wygląda dane (za pomocą osadzonych XSD), które każda operacja podejmuje i / lub zwraca.
Ze względu na tę samoopisowość aplikacja taka jak Visual Studio może wygenerować dla niej serwer proxy usługi sieci Web.

Ponadto istnieje kilka rozszerzeń SOAP (specyfikacje WS- *), które umożliwiają szyfrowanie lub zachowanie transakcyjne w połączeniu z SOAP. Chodzi o to, że możesz używać SOAP jako punktu kompleksowej obsługi do tworzenia usług internetowych klasy korporacyjnej.

Z drugiej strony...

Interfejs WebAPI służy do świadczenia usług REST. Formatem komunikacji dla REST jest zwykle JSON lub zwykły xml - chociaż to naprawdę nie ma znaczenia, może to być nawet zwykły tekst. Usługi REST podążają za zupełnie inną filozofią: mają być lekkie, aby można je było łatwo wykorzystać w skryptach po stronie klienta jako część rozwiązania AJAX lub na urządzeniach mobilnych.
W związku z tym konieczne jest ograniczenie do minimum poziomu ceremonii, w tym samoopisowości. Ponadto, nawet jeśli chcesz, większość formatów komunikacyjnych używanych w usługach REST (takich jak JSON) i tak nie ma formalnego sposobu na opisanie ich zawartości.

Podsumowując, można powiedzieć, że usługi sieciowe SOAP są zwykle używane do integracji (być może różnych) rozwiązań, podczas gdy usługi REST lepiej nadają się do zapewnienia komunikacji między częściami tego samego rozwiązania.


1

Interfejsy API SOAP / WS- * i RESTful nie są takie same. Jeśli chcesz zbudować API obsługujące SOAP / WS- * WSDL, wybranym narzędziem w stosie Microsoft jest WCF, zamontowany z opcją wiązania HTTP (istnieją opcje wiązania XML i JSON, przy czym XML jest opcją obsługi WSDL).

W praktyce spożywanie WSDL z innego języka implementacji lub platformy było problematyczne. Warstwy bezpieczeństwa WS- * ponad górą jeszcze bardziej.

Moje własne doświadczenie dotyczyło głównie .Net, Node, Java i PHP w tym zakresie, i mogę powiedzieć, że kiedy masz platformy, które nie muszą definiować szczegółów typu potomnego lub użyją „Object” jako definicja, co najmniej problematyczne. Poza tym w większości nikt tak naprawdę nie rozumie całego SOAP / WS- * polegającego w dużej mierze na narzędziach, aby działało. To narzędzie ma wiele narzutów, a różne systemy działają inaczej.

Oto niektóre z powodów, dla których ludzie chcieli wypróbować prostsze implementacje. Usługi REST (ala Web API) oferują punkty końcowe wokół obiektów / stanu. Chodzi o to, że łatwiej jest zdefiniować zestaw prostszych struktur obiektowych reprezentowanych w formacie JSON i punktów końcowych do użycia z tymi strukturami, niż próbować użyć WSDL z obcego środowiska, które nie działa, a następnie spróbować wkopać i obejść problem.

Paradoksalnie, jest to jeden z obszarów, użyłem węzła w partii jako usługę tłumaczenia, po prostu dlatego, że był na tyle elastyczny, aby zaakceptować brudne implementacje jak klient, a mógłbym pisać proste klientów przed moim przystosowanym ładowności, który pracował lepiej. Np .: C # pobiera tekst JSON, którego używam JSON.Net do konwersji na reprezentację obiektu, którą zdefiniowałem faktycznie działał, gdy nie mogłem użyć importu WSDL.

W praktyce zdarza się to często.


-3

Chociaż wiele odpowiedzi tutaj jest świetnych, myślę, że odpowiedź jest DUŻO prostsza: patrzysz na niewłaściwą technologię do pracy.

Jeśli chcesz zbudować usługę SOAP, naprawdę powinieneś trzymać się WCF. Nadal jest to bardzo potężny framework, Microsoft wciąż go aktywnie rozwija, nie wydano żadnych zawiadomień, aby myśleć, że pójdzie gdziekolwiek w przyszłości, i zostało to zrobione z myślą o tym. Interfejs API sieci Web w żaden sposób nie zastępuje WCF (choć prawdopodobnie jest bardziej modny niż WCF).

Interfejs API sieci Web był kiedyś częścią WCF, ale został przeniesiony do rodziny ASP.NET, PONIEWAŻ tak naprawdę nie pasował do innych technologii WCF. Interfejs API sieci Web jest znacznie bardziej zainteresowany używaniem protokołu HTTP jako protokołu aplikacji niż protokołu przesyłania. W Web API czasowniki HTTP są królem, w WCF HTTP służy jedynie do włączenia protokołu SOAP.

Nie obwiniaj interfejsu API sieci Web o to, że nie daje możliwości robienia pewnych rzeczy, dla których nie został stworzony.


3
To nie odpowiada na pytanie.
Andy
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.