User interfacenek tekinthető-e egy API?

Címkék

Igen.
25% (97 szavazat)
Nem.
75% (296 szavazat)
Összes szavazat: 393

Hozzászólások

Ez most API vagy UI:

curl ceg.hu/alkalmazottak
curl -X DELETE ceg.hu/alkalmazottak?Margit

És ez:

sqlite3 ceg.db 'DELETE FROM alkalmazottak WHERE name = "Margit"'

Pont ez a kérdés, hogy pl. egy webszolgáltatás API-ja UI-nak tekinthető-e, hiszen azt egy fejlesztőnek kell használnia.

az sqlite3 egyértelműen UI, hiszen egy CLI parancs, a CLI meg UI, csak karakteres és nem grafikus.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

ha jobban megvizsgaljuk (es az egy szinttel feljebbi kommentnek adunk igazat) ezt a dolgot akkor az osszes web alapu UI API lenne nem?
tekintve, hogy a web szerver csak egy HTML-t ad vissza - amit a kliens program amiben nezed szepen formaz ... tehat ebben van teljesen igazad ha egy JSON-t (vagy JSON alapjan egy kimenetet) szepen formazok akkor az API = UI. Nem gondolom, hogy attol dol el, hogy milyen nyelven irodik a kimenet.

Egy lentebbi komment viszont adott egy nagyon jo pontot. Az API-t technikailag nem a felhasznalo (programozo) hasznalja, hanem az o altala elkeszitett szoftver tehat a kozvetlen hasznaloja nem egy user ebbol kovetkezoleg nem UI hanem PI (mint ahogy a neve is az ugye ...)

Szerintem filozofiai vita de talan UI mert vegulis az a szegeny programozo is valoszinuleg hasznalt valamilyen kliens programot (Insomnia, Postman etc.) amikor a fejlesztest vegezte tehat amig maga a programozo kozvetlenul ertelmezi a kimenetet (mivel az szamara ugyanugy olvashato mint egy end user szamara a formazott HTML kod) addig UI, viszont amikor mar csak az altala fejlesztett program kapcsolodik az API-hoz es a programozo nincs jelen a kommunikacio kimenetenel akkor nem UI.

Tehat osszessegeben a valasz igen. UI. (neha)

Az API egy függvény- és eljárás halmaz, amit az alkalmazások használnak. A CLI parancs az nem API, az egy eszköz (alkalmazás) ami használja az API-t. A CLI UI-nak tekinthető, az API nem. Szerintem.
--
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." John F. Woods

curl ceg.hu/alkalmazottak
curl -X DELETE ceg.hu/alkalmazottak?Margit

Itt szerintem a Crul UI-ját használod egy webes api meghívására. Tehát a felhasználó az UI-val találkozik, de ismeri az API-t is.

sqlite3 ceg.db 'DELETE FROM alkalmazottak WHERE name = "Margit"'

Itt egyértelműen az SQLITE3 program UI-ját használod egy db művelere...

Nagy Péter
www.ddo.hu

Majd ha az alkalmazások is kaphatnak személyi azonosítót (ID, Passport) akkor jöhet újra a kérdés, és beszélgetünk róla.

Szavazás apropója az a vita, hogy az egy dolog, hogy az API-t egy szoftver hív, viszont egy fejlesztőnek kell használnia, ergo az usere végső soron a szoftverfejlesztő, aki egy API-t felhasznál és kommunikál egy másik library-vel, szolgáltatással.

Ilyen szempontból kérdés az, hogy (pl. egy service esetén) maga az API programozói felülete user interface-e?

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Ok, akkor legyen úgy, hogy az "end user" legyen csak egyszerűen user, minden más user az programozó, fejlesztő, egyéb állatfaj. Az nem autó, amiben nincs kormány, csak a helye, és egy fogóval kell tekergetnem a tengelyt. A programozó se állandóan az API-t használja, hanem ráköti a programot, és megy tovább a dolgára. Nyelvileg "use" ez is, de a user az IT-ban nem annyit jelent csak, hogy felhasználó, hanem az, aki nem fejleszt, hanem leül, és amit szabad megnyomja. Meg azt is, amit nem, de az nem a feladata :).

Akkor miért szavaztatod meg? :)

A fejlesztőknek szánt program számára a fejlesztő a user, igen, viszont a fejlesztők a lakosság kis százalékát teszik ki, nagyobb rész számára a UI az egy nyomkodható valami, mert nagyobb részük nem is fejleszt.

Van olyan olvasata is a kérdésnek, hogy a UI az általában behatárolt feladatok végrehajtását teszi lehetővé, egy API viszont sokkal nagyobb feladatkört tesz lehetővé, kombinálhatóak az elemei, esetleg még önmagát is át tudod vele alakíttatni, ..., vannak közös elemeik, persze.

"az egy dolog, hogy az API-t egy szoftver hív, viszont egy fejlesztőnek kell használnia"

Szerintem nem a használat a fő szempont, hanem hogy ki fogyasztja az UI/API által elérhetővé tett adatot.

Ami emberi fogyasztásra készült, az UI. Ami kód által feldolgozásra, az API. Aztán van az átmenet, amikor te json-t olvasgatsz, vagy a kódod html-t parse-ol.

"Ami kód által feldolgozásra, az API. "
Azt viszont ne feledd, hogy minden API, minden domain modelling valamely szempontból, valamilyen szemszögből modellezi az adott domaint.
És a hívó kód szemszöge más lehet, mint amit az API kitalálóinak a szemszöge.

Nem. Ugyanis program fogja használni és nem ember.
Az egy dolog, hogy ezt a programot egy ember készíti el, de az, hogy valami API vagy UI, az runtime behaviour, nem compile-time.

Viszont az meg igaz, hogy a kódot (interfészt, absztrakciókat, osztályhierarchiát stb.) nem a gépnek, meg a compilernek írjuk, hanem más fejlesztőknek, akár jövőbeni magunknak.
Ez egy teljesen más aspektus.
Nem felhasználói interfész a kód sem, de a tervezésnél figyelembe kell venni, hogy annak ellenére, hogy gép hajtja végre, ember lesz az, aki olvassa.

Hogy éljek egy hasonlattal: a szöget ugyan a kalapács feje veri be a falba, de a kalapács nyelének a kialakítása teszi lehetővé a szög kényelmes beverését a falba.

"Nem felhasználói interfész a kód sem, de a tervezésnél figyelembe kell venni, hogy annak ellenére, hogy gép hajtja végre, ember lesz az, aki olvassa."

Sokan azt mondják, hogy ez az egyik korlátja az igazán jó programok írásának, nem a gépileg optimálist írjuk meg dokumentációval, hanem a könnyen olvashatót. Filozófiai kérdés is részben, és persze biztos mérhető is ügyesen, hogy a doksi olvasása a költségesebb (munkaidő), vagy a nem annyira hatékony kód általi időveszteség, ahogy látom mostanában a legtöbb helyen a gép az olcsóbb. De ettől még nem fekete-fehér, hogy az emberben nem-e elvárható egy újabb dekódoló réteg, hogy amit látnia kell, az ne "alma + körte" szintű legyen.

A hasonlatod szerintem nem teljesen jó, a kalapács fejét (vagy inkább a hegyét) nem úgy alakítjuk ki, hogy neked kényelmes legyen fogni, van még egy szint absztrakció benne, ahogy a programkódban is lehet kéne legyen.

Lehet, hogy ez korlát, de a gyakorlat azt mutatja, hogy sok szoftvernek hosszú távon karbantarthatónak kell lennie, vagy legalább képesnek arra, hogy alapvető módosítás nélkül hozzá merj nyúlni.

A másik ilyen dolog az, hogy a kódoptimalizálást, amire szabályok vannak, miért agyban akarjuk elvégezni, amikor elvégezheti gép is, ugyanazokat a szabályokat alkalmazva?
Hiszen ezért írunk magasszintű nyelveken, ahol már van olyan alapvető absztrakció, mint lebegőpontos szám, egész szám, karakter adattípus. Igen, maga az adattípus is egy absztrakció, hiszen a gép csak memóriacímet meg bitmintát lát, bármikor összead neked két memóriaelemet, akkor is, ha az egyik egy karaktert, a másik meg egy lebegőpontos számot tartalmaz.
Azért vezettünk be egyre magasabb szintű absztrakciókat, hogy egyre több minden dolgot írhassunk le úgy szoftverrel, hogy nem kell hozzá iszonyatos embertömeg és dokumentáció.
Egyszerűen szólva: a gépi kód írása nem skálázható.
Például nem dokumentálod le memóriacímek szerint a tárolt adatok típusát, mert nem kell - elvégzi helyetted a compiler.

A harmadik ilyen dolog a villamos-kompatibilitás: ha abban bízunk, hogy vna a cégben pár zseni, aki átlátja a kódbázist, és nélkülözhetetlenek a rendszer működtetéséhez, mert optimális kódot írnak, amit amúgy junior programozók képtelenek, akkor ha ez a pár zseni nyugdíjba megy, elüti a villamos, megveszi egy másik cég, vagy bármilyen más okból nem elérhető, akkor bukott a mutatvány.

Egyszerűen a gépileg optimális kód írása nem skálázható olyan mértékben, amit szeretnénk. Nem csak költségről van itt szó, hanem lehetőségekről is.

Igen, csakhogy a "kényelmes beverésre" pont azért van szükség, mert lesz mögötte egy user, aki azt a szöget be akarja verni és ezzel máris eljutunk az API UI-e és kell-e, hogy user friendly legyen-e kérdéshez.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

Az hogy user friendly nem fekete-fehér kérdés, egy SQL lekérdezés megírásához kell ismerni azt a nyelvet, ez van, nem nem-user-friendly, hanem van egy előkövetelmény. Látom hol lehet belekötni mindkét végletbe, de szerintem a user friendly-ség sem értelmezhető előkövetelmények nélkül, pár éve a fél világ rühellte az érintős dolgokat, majd pár év alatt tök természetes lett. De egy rakás félretárcsázás, hopp-töröltem-bocsi, ésatöbbi volt előtte.

Amúgy nem igazán tudom értelmezni, hogy egy API-ról mi alapján lehetne eldönteni, hogy user-friendly-e az API vagy nem.
Minden egyes API elemnek (osztálynak, interfésznek, metódusnak, paraméternek) értelme és célja van.

Mégpedig az, hogy valamely szempont szerint modellezzen egy domaint, a benne lévő elemeket és műveleteket. Azaz ebben sehol nincs benne, hogy az API user friendly legyen, hiszen az elterelné a lényegről a figyelmet. Ha például a user friendlység miatt kihagyunk valamit az API-ból, akkor előfordulhat, hogy a keletkező API-val már nem tudunk leírni valami olyan folyamatot, amit le kellene. Így maga a user friendlység sok esetben nem cél.
Hogy egy hasonlattal éljek: a GNOME 3 UI lehet, hogy user friendly, de sok mindennek a lehetőségét meg is vonja a felhasználótól.

Ettől még lehet cél az, hogy a gyakori felhasználási eseteket könnyen lehessen kifejezni az API-val (tipikusan: értelmes defaultok használata), míg a többi esetet is ki lehessen ugyan fejezni, de dolgozni kell hozzá. Hogy egy közismert elv alapján mondjam: a Pareto-elvet lehetne szem előtt tartani, aka 80-20-as szabályt (természetesen lehet ez 70-30 is, csak szemléltetés a lényeg): az API használati lehetőségeinek 80%-át leíró hívó kód mérete, meg a 20%-nyi lehetőségeket leíró hívó kód mérete álljon 20-80 arányban.
Erre már lehetne azt mondani, hogy ez az API user friendly valamilyen szempontból.
De amíg nem mondod meg, hogy mit értesz az alatt, hogy user friendly egy API, vagy nem, addig nem értelmes a kérdés szerintem.

"Amúgy nem igazán tudom értelmezni, hogy egy API-ról mi alapján lehetne eldönteni, hogy user-friendly-e az API vagy nem."

Azért ne mond már, hogy nem találkoztál még olyan API-ról, amire első percben azt mondtad, hogy totál agyfasz, ahogy használni kell és lehetne sokkal egyszerűbb is.

----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™

(x) Egyéb

Simán el tudok képzelni olyan helyzetet, amikor egy API kifejezetten egy végfelhasználói csoportnak készül, pl. egy self-service BI megoldásban való összekattintgatásra, mint ahogy olyan API is van bőven, amit csak az adott projekt fejlesztői használnak házon belül.

Tervezéskor érdemes lehet figyelni ezekre a különbségekre.

Ez olyan, mint amikor van egy API, ami XML-ben kommunikál feléd, de van hozzá egy XSLT, az már UI, valahol a széles felhasználói közönségtől elvárható előképzettség szintje határozza meg, hogy még kell hozzá szakit hívni, vagy mindenki érti akinek kell. A szaki dolga meg az, hogy ami még nem érthető, azt tegye érthetővé.

Mi dev interfésznek hívjuk, néha megtervezzük.

UI alatt értünk akár TUI-t (Text UI, pl. ncurses v CLI), VUI-t (Siri, Alexa, stb), vagy chat UI-t is, esetleg VR vagy MR UI-t, de többségében GUI.

Ezek egy részét tanítom, cégbe néha beesik mindenféle.

De az API-t ritkán használja végfelhasználó, azaz olyan ember aki a rendszert saját céljaira használja, nálunk meg az a nagy kérdés, hogy ki az interfész a valóvilág és a digitális lét közt.

Én inkább API-nak szeretném tekinteni a UI-t. Az eszközök/szolgáltatások túlnyomó többségénél egyáltalán nem figyelnek rá, hogy lehessen API-ként is használni. Jó példa sok CLI program, ami tud interaktívan működni, de ha akarod, akkor egy script-be berakva is megállja a helyét. Azt szeretném, ha minden így működne és bármi köré rittyenthetnék scripteket. Bili és a kéz esete...

Operációs rendszernek tekinthető-e a C?

Egy jo apit kenyelmes hasznalni, tomor, hosszu tavu, egyertelmu, egyertelmu hibauzeneteket ad, stb stb.
Ha nem tekinted user interfacenek, akkor a fentiek nem biztos, hogy prioritasok lesznek.
Az api felhasznaloja a programozo, szamara kell kenyelmesse tenni a hasznalatat.

Pl.
User = fejlesztok
Interface = ahogy elerik az alkalmazast
Nem is ertem, miert ne lenne UI egy API barki szamara. Csak a celcsoportot kell nezni.

Ha az API fejlesztoje kikoti, hogy az o altal keszitett felulelettel hasznalhatod az o API szolgaltatasat, akkor melyik?

Akár feketeribizlinek is tekinthető.
Ha nem vagy REST leprogramozni.