Je Swagger utter crap?

Re:Je Swagger utter crap?
« Odpověď #15 kdy: 03. 04. 2019, 23:39:29 »
Jako ja videl swagger jako cestu k vytvoreni snadno udrzovatelne dokumentace k REST API, ve springu (Springfox) se doplnilo jenom par anotaci a byl kod a dokumentace na jednom miste, coz se fajnove reviewuje. API drzelo Resource semantiku (tj GET /cats, GET /cats/1, POST /cats PUT /cats/1, DELETE /cats/1). Jako hlavni problem, na co nadavas, nevidim swagger, ale prave to, ze nekdo prasacky navrhne API. Na Swagger by se dalo jistym zpusobem pohlizet, jako na WSDL pro REST (pomoci obojiho lze vygenerovat kostru kodu)


Re:Je Swagger utter crap?
« Odpověď #16 kdy: 04. 04. 2019, 00:28:43 »
Zaprve je treba si ujasnit, proc chceme dat pryc SOAP. Z meho uhlu pohledu jediny rozumny duvod ktery jsem slysel je, ze se to blbe pouziva treba prave javascriptarum.

Ale to je validný a rozumný dôvod. Angular, React, Vue,.. konzumuje zvyčajne REST API, nie SOAP. Použitie RESTu v komunikácii backend -> JS frontend je správne! Neznásilňuj rokmi overené postupy!

Podle me je SOAP v principu genialni a nikdo nevymysli nic lepsiho - tehda moc dobre vymysleli, jak mezi sebou maji backend komponenty komunikovat.

Jo, na komunikáciu medzi backend komponenty si nechajte SOAP. Javascriptár z frontendu vám nemá čo kecať ako si vy budete komunikovať medzi backend komponenty! A naopak, ak Javascriptár chce na frontend REST tak mu ho dajte a nekecajte mu do jeho práce!

Neni zde zadny prostor pro impresionisticke umelce programatory, a to je vzycky dobre.

Jo, ale impresionistické by bolo posielat chudákovi Javascriptarovi SOAP, tam frčí REST!

Re:Je Swagger utter crap?
« Odpověď #17 kdy: 04. 04. 2019, 08:07:45 »
Tak asi to dělal poprvé. Možná měl dostat pro začátek menší zadání. Ale s technologií to moc nesouvisí, ne? Ani to automaticky neznamená, že by bylo UDP vhodnější.
To ho neomlouva.. zaklady sitariny a BSD socketu by mel mit.
Jistě. Všechno co udělal by udělal úplně stejně blbě s BSD sockety. Takže nanomsg je v to úplně nevinně.

Já vím že je se to dá brát jako šťourání, ale sorry - bavíme se zde o schopnosti lidí analyticky řešit problémy, a takové detaily jako správná identifikace zdroje problémů, jsou zásadní.

Re:Je Swagger utter crap?
« Odpověď #18 kdy: 04. 04. 2019, 08:26:56 »
SOAP zprava prenasena v HTTP je vzdycky POST - vsechny dalsi http metody jsou redundantni. V body se prenasi objekt, jehoz jmeno reprezentuje jmeno metody. Pro rozliseni ma zpravidla postfix "Request". Jeho atributy predstavuji 1:1 parametry metody. A to je v principu co se tyce RPC vsechno - nic vic neni potreba. je zde kompletni, osekana, takrka 1:1 vazba mezi SOAP zpravou a volanou metodou. To co je v REST API delanem jako Resource jsou akorat reduntantni nesmysly:
Je to uplne k nicemu, redundatni nesmysly, ktery oceni tak leda programatory typu impresionisticky umelec, ktery se minul povolanim.
Sorry, ale zase mimo. Když pomineme to že jsou i jiné transportní možnosti než HTTP (moc se to nevidí), tak rozhodně nemůžeme vynechat dva různé styly - RPC a Document. V kombinaci s literal/ecoded to dává čtyři styly. No a pak samozřejmě haldy různých rozšíření. A to že přenos přes HTTP není úplně přesně standardizován, takže ne každé dvě implementace se domluví (ok, možná že v tomhle se situace za posledních 15 let změnila). Jo, hlavička SOAPAction, s tou byl vždy kopec srandy...

To co popisuješ je v podstatě XML-RPC, nebo gRPC, nebo některý z dalších protokolů - už jsem jich viděl víc. Ale rozhodně ne SOAP.

Neni zde zadny prostor pro impresionisticke umelce programatory, a to je vzycky dobre.
V SOAPu je hodně prostoru pro manýristické umělce programátory. To je hlavní důvod, proč se proti němu před deseti lety zvedla vlna odporu. Dnes se možná zvedná vlna odporu proti RESTu, uvidíme co bude dál.

Holt musím pověsit cibule na opasek a dát za pravdu RDa: Dneska ti mladí neznají historii...

gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:Je Swagger utter crap?
« Odpověď #19 kdy: 04. 04. 2019, 11:23:44 »
U jednodussich aplikaci je navrh API odshora overkill. Lepsi vychazet z ORM modelu.


Re:Je Swagger utter crap?
« Odpověď #20 kdy: 04. 04. 2019, 15:23:24 »
Stejne tak, jako pro IPC komunikaci pouzije zcela nevhodne napr. nanomsg, namisto toho, aby se protokol udelal nad UDP, nebo TCP.
Ok, o nanomsg jsem dodnes neslyšel, ale podíval jsem se na https://nanomsg.org a musím se zeptat: proč je to zcela nevhodné a proč je lepší navrhnout vlastní protokol nad TCP?

Tedy kromě toho, že je to moc nové a že je "trendy" a že je to "lepení" - to já osobně nepovažuji za relevantní argumenty. Pravda, sedmdesátá léta nepamatuji, tak jsem možná jeden z těch "mladých lidí"

Najaty programator naprogramoval aplikaci kde je 1 management node, a N slave nodu stylem ze se ten centralni uzel pripojuje skrze nanomsg do klienta a provadi jakysi pokus o RPC. Sakra velky problem je, ze to spojeni navrhnul opacne (protoze dnes je vsecho P2P tak na to co je klient a co server s*re pes vid?), takze moznost pripojit libovolny, predem neznamy pocet uzlu neni mozny. Druhy problem neznalosti sitariny je, ze borec to pseudo RPC mel v blokujicim rezimu pro obe strany. Jako really? A pak to lepi pouzitim X vlaken podle poctu klientu. Dusledek opacne konektivity je, ze namisto dorucovani zprav a normalniho FSM, delal polling, ktery ve spojeni s blokujicim pristupem delal psi kusy a musel dolepovat mutexy. Nemluvne o stavu, kdy jeden klient vypadl, a cely distribuovany system chcipl. Na to, ze UDP by bylo vyhodnejsi pro distribuci broadcast sdeleni, protoze ty uzly se musi synchronizovat a ridit spolecne muzeme taky zapomenout. Co to melo delat bylo znamo predem, ale jak to ma presne udelat nebylo dano. Tak z toho vznikl takovej humus... opravdu neni kazdy hodne programatorske profese.

Abych to shrnul, nanomg je spatne, protoze to nejaky jouda spatne pouzil, proto budeme pro broadcast messages pouzivat UDP pakety, u kterych neni jistota ze vubec dojdou, o nedoruceni se nikdo nedozvi, koncept postavime na uporne vire, ze UDP paket zkratka dojde. Nebo budem UDP pakety potvrzovat ja u blbych a naimplementujem si vlastni TCP stack pro chude.
Hlavne nepouzit neco jako NATS, ktery je na tyhle ulohy delany.

Re:Je Swagger utter crap?
« Odpověď #21 kdy: 04. 04. 2019, 15:37:50 »
Zaprve je treba si ujasnit, proc chceme dat pryc SOAP. Z meho uhlu pohledu jediny rozumny duvod ktery jsem slysel je, ze se to blbe pouziva treba prave javascriptarum.

Podle me je SOAP v principu genialni a nikdo nevymysli nic lepsiho - tehda moc dobre vymysleli, jak mezi sebou maji backend komponenty komunikovat. SOAP ktery je zalozeny na RPC vlastne vytvari pro programatora ten use case, ze programator jakoby vola metodu v jine komponente a to volani je nezavisle na pouzite platforme.

SOAP zprava prenasena v HTTP je vzdycky POST - vsechny dalsi http metody jsou redundantni. V body se prenasi objekt, jehoz jmeno reprezentuje jmeno metody. Pro rozliseni ma zpravidla postfix "Request". Jeho atributy predstavuji 1:1 parametry metody. A to je v principu co se tyce RPC vsechno - nic vic neni potreba. je zde kompletni, osekana, takrka 1:1 vazba mezi SOAP zpravou a volanou metodou. To co je v REST API delanem jako Resource jsou akorat reduntantni nesmysly:
- HTTP metody - nanic
- path variables - nanic
- jenom jeden mozny request body - nanic
- url parametry - nanic

Je to uplne k nicemu, redundatni nesmysly, ktery oceni tak leda programatory typu impresionisticky umelec, ktery se minul povolanim.

Proc volani mezi komponentami je RPC a resource je nanic? Protoze my takrka vsichni programatori delame v proceduralnim paradigmatu - nepotrebujeme mit jedno paradigma pro programovy kod a jine paradigma pro komunikaci se vzdalenymi komponentami. A nevsiml jsem si, ze by mezi programatorama byl takovy prehrsel borcu, co maji vsechno v maliku, a zvladnou mit v pouzitych technologiich gulas, plny redundtnich kravin. Je to prave naopak.

At uz je programator zalozeny vice OOP nebo vice proceduralne, tak komponenty predstavuji objekty, ktere si mezi sebou posilaji zpravy (volanim metod) uplne stejne, jako kdyz volame v ramci kompinenty nejakou service. Neni tam zadny duvod pouzivat Resource API.

Nevim cim nahradit Swagger API, ale SOAP je v principu pekne a jendoduse nahraditelny a uz jsem to videl:

V prve rade se pouzije uplne stejny princip, jaky pouziva SOAP, protoze nikdo nic lepsiho nevymysli. Pouzije se REST, API se modeluje pomoci XSD, uplatni se uplne stejne pravidla jako ma SOAP:
- vsechny HTTP requesty jsou POST
- sere se z vysoka na path variables a jine kraviny, je tam jen body
- body je XMLko nebo JSON, je to jedno, jeho jmeno predstavuje jmeno metody a atributy jsou 1:1 parametry jakoby parametry metody
- jako bonus se uz zezacatku mysli na zpetnou kompatibilitu pro Response, aby se porad nemuselo verzovat API. K tomu slouzi v XSD tag "<xsd:any ... >" do ktereho se pri prekladu Response na Java objekt nastrkaji do Listu ty atributy, pro ktere se nepodarilo najit zadny konkretni element pro namapovani - takze kdyz se do Response nekdy prida dalsi atribut, tak kvuli tomu nezacnou okolni komponenty padat na hubu.

Neni zde zadny prostor pro impresionisticke umelce programatory, a to je vzycky dobre.

A ted jak je to v realite.
Prijdu u zakaznika k jeho SOAP service.
Totalni chaos a bordel, veschny atributy vystaveny nako optional String. Beda ale kdyz onen optional string nevyplnim, vrati se mi SOAP exception s payload "Eror-11355 - Bus error".

Dostanu WSDL, pro ktery si mam vygenerovat skeleton. Vsechny datove polozky se jmenujou "data" a pouzivanji WSDL s indcludouvanym XSD, co ma includovany XSD, co ma includovany XSD. Nejlepe nejaky business celofiremni header, co odkazuje na nejake dalsi XSD, nejlepe tak kouzelne provazano, ze cely balik provazanych XSD ma 30 mega, vsechno kolem toho chodi a boji se do toho sahnout.
Pak udelam zakladni jednoduchy Spring client, ktery si vzdy na zacatku vyrobi z WSDL skeleton callu, springovi pak trva priprava na kazdy WS call 4 sekundy na 8jadrovem serveru. Tak si jak u blbejch implementuju pool predpripravenych clientu a reusuju.
Konkretne onen 30MB bulk mej i tu vlastnost, ze jediny, kdo byl schopen pro to vygenerovat skeleton byl priohly SpringWS za pouziti wsimport, JAXB nelepil vubec, ten lehl rovnou pri generovani.

Pak prijde pozadavek za zabezpeceni. Mrknu se na WSsecurity extenze a zjistim, ze tohle narhoval naprosty magor. Ze jakmu jsem si nasel autory navrhu, tri panove ze Microsoftu/Sunu/Ericssonu. Napriklad existuje 7 zpusobu predavabi verejneho klice, koncept je tak brutalne slozity, ze prakticky neexistuje plna implementace vseho.
Finalne po cca mesici prace (nedelam si zadek) se "zabezpecene" pripojim, request ma celkem 7 KB z toho payload je jeden bajt "0" nebo "1".

Vse co popisuju jsem realne zazil a ty systemy stale "funguji".

SOAP je v realnem pouziti prekomplikovany shit a proto taky vsechny softy co znam vystavujou API na REST nebo XML-RPC.

Re:Je Swagger utter crap?
« Odpověď #22 kdy: 04. 04. 2019, 19:15:13 »
Vse co popisuju jsem realne zazil a ty systemy stale "funguji".

SOAP je v realnem pouziti prekomplikovany shit a proto taky vsechny softy co znam vystavujou API na REST nebo XML-RPC.
Přidávám se, moje zkušenosti jsou velmi podobné.

Na druhou stranu předpokládám, že přesně takhle budou vypadat korporátní systémy budované pomocí Swaggeru (podle toho co píše OP, tak mají dobře našlápnuto).

Re:Je Swagger utter crap?
« Odpověď #23 kdy: 04. 04. 2019, 20:06:32 »


A ted jak je to v realite.
Prijdu u zakaznika k jeho SOAP service.
Totalni chaos a bordel, veschny atributy vystaveny nako optional String. Beda ale kdyz onen optional string nevyplnim, vrati se mi SOAP exception s payload "Eror-11355 - Bus error".

Dostanu WSDL, pro ktery si mam vygenerovat skeleton. Vsechny datove polozky se jmenujou "data" a pouzivanji WSDL s indcludouvanym XSD, co ma includovany XSD, co ma includovany XSD. Nejlepe nejaky business celofiremni header, co odkazuje na nejake dalsi XSD, nejlepe tak kouzelne provazano, ze cely balik provazanych XSD ma 30 mega, vsechno kolem toho chodi a boji se do toho sahnout.
Pak udelam zakladni jednoduchy Spring client, ktery si vzdy na zacatku vyrobi z WSDL skeleton callu, springovi pak trva priprava na kazdy WS call 4 sekundy na 8jadrovem serveru. Tak si jak u blbejch implementuju pool predpripravenych clientu a reusuju.
Konkretne onen 30MB bulk mej i tu vlastnost, ze jediny, kdo byl schopen pro to vygenerovat skeleton byl priohly SpringWS za pouziti wsimport, JAXB nelepil vubec, ten lehl rovnou pri generovani.

Pak prijde pozadavek za zabezpeceni. Mrknu se na WSsecurity extenze a zjistim, ze tohle narhoval naprosty magor. Ze jakmu jsem si nasel autory navrhu, tri panove ze Microsoftu/Sunu/Ericssonu. Napriklad existuje 7 zpusobu predavabi verejneho klice, koncept je tak brutalne slozity, ze prakticky neexistuje plna implementace vseho.
Finalne po cca mesici prace (nedelam si zadek) se "zabezpecene" pripojim, request ma celkem 7 KB z toho payload je jeden bajt "0" nebo "1".

Vse co popisuju jsem realne zazil a ty systemy stale "funguji".

SOAP je v realnem pouziti prekomplikovany shit a proto taky vsechny softy co znam vystavujou API na REST nebo XML-RPC.

Tak. A je to tu. A tohle je urcite duvod k tomu, proc pouzivat REST. Ze to nekdo zprasil. Ti sami lidi zprasi i ten REST!

Re:Je Swagger utter crap?
« Odpověď #24 kdy: 04. 04. 2019, 20:21:57 »
Zprasit se da vzdycky a vsechno. Touto logikou bys nevytvoril nic

Re:Je Swagger utter crap?
« Odpověď #25 kdy: 04. 04. 2019, 22:14:59 »
Zprasit se da vzdycky a vsechno. Touto logikou bys nevytvoril nic

No samozrejme, ze se da zprasit vsechno, pak nema smysl sasit s prekoplikovanym WSDL selmostrojem, kdyz mi staci jednoduchy XML-RPC over HTTPS a zabezpeceni spring-security poveseny na Url pattern.
Ws security extensions je ciste dilo blaznovo, ti tri magori, co to navrhovali, se u toho museli smat jak Joker z Batmana.
Wsdl.se.da navrhnout bud striktne, pak je to straslive neohebne a da se na ro realne napojit jenom z Jawy a castecne z C#. Nebo se WSDL definuje jako shluk optional stringu, pak se na to da napojit i s PHP, Perlu - na nejake checky konzistence dat sozrejme zapomen.
Kdyz uz mam sasit s pevne definovanou strukturou zprav, to uz radri nasadim ProtocolBuffers - to ma aspon vykon.

Re:Je Swagger utter crap?
« Odpověď #26 kdy: 05. 04. 2019, 00:21:16 »
Ale tu nie je reč o moderných web aplikáciách, že nie? Lebo inak by ste boli ale fakt, že zúfalo mimo a možno až 20 rokov pozadu.

RDa

  • *****
  • 2 467
    • Zobrazit profil
    • E-mail
Re:Je Swagger utter crap?
« Odpověď #27 kdy: 05. 04. 2019, 02:14:06 »
Ale tu nie je reč o moderných web aplikáciách, že nie? Lebo inak by ste boli ale fakt, že zúfalo mimo a možno až 20 rokov pozadu.

Moderni web appka ktera neni schopna fungovat na 2 roky starem prohlizeci, jo, to vis, ze to potrebuji jako uzivatel ke spokojenosti (konkretne Aukro.cz nejede uz pres rok, na FF 45.x vydanem 2016/03). Nyni se pridavaji MAPY.cz - ale jenom nekdy. Zda se ze includovane mapky na webech porad funguji.. ale jejich hlavni stranka nikoliv. To je pokrok, jo?

Re:Je Swagger utter crap?
« Odpověď #28 kdy: 05. 04. 2019, 07:58:36 »
Standa Blabol:

Co je spatneho na WSDL co ma include XSD a dalsi a dalsi? To WSDL se prece da vygenerovat na zaklade XSD schematu. Ty ho pak pouzijes pro SOAP UI nebo pro vygenerovani Clienta. To te prce nemusi moc zajimat, co v tom WSDL presne je, nemusis si ho cist. Ne snad?

gill

  • ****
  • 270
    • Zobrazit profil
    • E-mail
Re:Je Swagger utter crap?
« Odpověď #29 kdy: 05. 04. 2019, 10:45:30 »
Standa Blabol:

Co je spatneho na WSDL co ma include XSD a dalsi a dalsi? To WSDL se prece da vygenerovat na zaklade XSD schematu. Ty ho pak pouzijes pro SOAP UI nebo pro vygenerovani Clienta.

kdyz ti nevadi, ze zbytecne posilas tuny sracek. Treba u mobilnich aplikace to muze vadit.

To te prce nemusi moc zajimat, co v tom WSDL presne je, nemusis si ho cist. Ne snad?

jen dokud vse funguje.