API: Porovnání verzí

Smazaný obsah Přidaný obsah
Pannage (diskuse | příspěvky)
m Oprava odkazu na rozcestník
m typografické úpravy
Řádek 1:
{{Různé významy}}
'''API''' (zkratka pro '''Application Programming Interface''') označuje v  [[Informatika|informatice]] [[Rozhraní (informatika)|rozhraní]] pro [[programování]] [[Aplikační software|aplikací]]. Tento termín používá [[softwarové inženýrství]]. Jde o  sbírku procedur, funkcí, tříd či protokolů nějaké [[knihovna (programování)|knihovny]] (ale třeba i  jiného programu nebo [[Jádro (informatika)|jádra operačního systému]]), které může [[programátor]] využívat. API určuje, jakým způsobem jsou funkce knihovny volány ze zdrojového kódu programu. Rozhraní, které se vytváří při [[Překladač|kompilaci]] a  je využíváno při běhu programu, se nazývá [[ABI]].
 
== Příklady ==
Důležitá jsou například grafická API ([[OpenGL]] a  [[DirectX]]), která jsou standardizována a  [[programátor]] je může v  programu využít. Způsob jejich vykonání pak záleží na konkrétním počítači, na výkonnosti grafické karty, případně může být vykreslování kompletně softwarově [[emulátor|emulováno]] nějakou programovou knihovnou (např. [[Mesa 3D]]).
 
V  [[Operační systém|operačním systému]] [[Microsoft Windows]] není nerozlišeno voláním knihovních funkcí a  [[Systémové volání|systémová volání]]. V  programech se používá jednotné [[Windows API]].
 
Funkce API jsou programové celky, které programátor používá namísto toho, aby je sám naprogramoval.
 
== API operačních systémů ==
V  současné době jsou nejrozšířenější dva standardy API OS: POSIX (IEEE) a  Win32 (Microsoft). Rozhraní [[POSIX]] bylo vytvořeno pro standardizaci [[UN*X|unixových]] operačních systémů, rozhraní [[Windows API]] reprezentuje rozhraní pro systém s  [[Mikrojádro|mikrojádrem]] (absence [[Systémové volání|systémových volání]]).
 
== Vlastnosti ==
API je abstrakce, která definuje a  popisuje rozhraní pro interakci s  řadou funkcí, používaných součástí softwarového systému. Software, který poskytuje funkce popsané API říká, že je implementován v  API. API může být:
 
* obecné – jedná se o  úplný soubor rozhraní API, který je zasílán v  knihovnách programovacího jazyka (např. Standard Template Library v  C ++ nebo Java API)
* konkrétní – chce řešit konkrétní problémy, jako jsou [[Mapy Google]] nebo Java API for XML Web Services
 
* jazykově závislé – to znamená, že je k  dispozici pouze v  daném programovacím jazyce, pomocí syntaxí a  základních prvků tohoto jazyka, aby API bylo vhodné pro použití v  této souvislosti
* jazykově nezávislé – to znamená, že lze volat z  několika programovacích jazyků, což je žádoucí vlastnost pro službu orientovanou v  API, která není vázána na daný proces nebo systém, a  může být poskytnuta jako [[Remote procedure call|RPC]] nebo [[Webová služba]]
 
Například internetová stránka, která uživatelům umožňuje hledání místních restaurací, je schopna si převzít vrstvu z  Google Maps, protože Google Maps API to umožňuje. Google Maps API kontroluje, jaké informace třetí síť může chytit, a  co lze s  nimi udělat. „API“ může být používán k  odkazování na kompletní rozhraní, jednu funkci, nebo dokonce na soubor více API poskytovaných organizací. Proto je rozsah výzkumu obvykle určen osobou nebo dokumentem, který sděluje informace.
 
== Web API ==
{{Podrobně|Webová služba}}
 
Při použití v  kontextu vývoje webu je API typicky definováno [[Hypertext Transfer Protocol|HTTP]] a  požaduje zprávy spolu s  definicí struktury odpovědí obvykle v  [[Extensible Markup Language|XML]] nebo [[JavaScript Object Notation|JSON]] formátu. Zatímco „Web API“ je prakticky synonymem pro [[Webová služba|Webovou službu]], nedávný trend (tak- zvaný [[Web 2.0|Web 2.0]]) se vzdaluje od [[Simple Object Access Protocol]], služby založené na více přímých [[Representational State Transfer|REST]] stylů komunikace. Web API umožňují kombinaci různých služeb do nových aplikací známých jako ''mashups''.
 
== Implementace ==
Standard [[POSIX]] definuje API, které pokrývá širokou škálu běžně používaných funkcí a  umožňuje je používat na mnoha různých systémech (typicky [[UN*X|unixové systémy]] – [[Linux]], [[OS X|Mac OS X]], různé [[BSD]] systémy atd.). Použití toho API však vyžaduje na každé platformě danou aplikaci znovu přeložit ([[Překladač|překompilovat]]). Kompatibilní API však umožňuje naprogramovat jeden zdrojový kód tak, aby beze změn fungoval na libovolném systému implementujícím toto API. [[Portace softwaru|Přenositelnost]] je výhodná jak pro tvůrce software (již existující produkt lze snadno přenést na jinou platformu), tak pro uživatele (mohou instalovat starší software na své novější systémy bez nutnosti zakoupení upgrade), i  když to často vyžaduje přenášet i  doplňující [[Knihovna (programování)|knihovny]].
 
[[Microsoft]] pro vytvoření zpětné kompatibility [[Windows API]] (Win32, tj. pro možnost běhu starších aplikací na novějších verzích systému Windows) poskytuje možnost nastavit specifický „režim kompatibility“. Apple zastává v  tomto ohledu méně vstřícný postoj, což mu poskytuje větší svobodu při vývoji aplikací za cenu označení starších programů jako „zastaralých“.
 
Mezi [[UN*X|unixovými]] operačními systémy existuje mnoho příbuzných, ale navzájem nekompatibilních operačních systémů, přestože běží na společné technické platformě (zejména [[IBM PC kompatibilní]] systémy). Bylo zde mnoho pokusů o  standardizaci API tak, aby výrobci software mohli šířit jedinou binární formu aplikace pro všechny tyto systémy, avšak do dnešního dne se žádný z  nich nesetkal s  větším úspěchem. Existuje projekt LSB ([[Linux Standard Base]]) pro platformu [[Linux]] a  [[BSD]] ([[FreeBSD]], [[NetBSD]], [[OpenBSD]]), který by mohl zaručit různé úrovně kompatibility API a  zajistit zpětnou kompatibilitu (pro programy napsané pro starší verze, které běží na novějších distribucích systému) a  multiplatformní kompatibilitu (umožňuje spuštění kódu určeného pro jinou platformu bez nutnosti rekompilace).
 
== Popis API v  unixovém systému ==
API popisuje, jak se daná funkce volá a &nbsp;co provede (resp. co vrátí jako výsledek). V &nbsp;[[UN*X|unixových]] systémech popisuje [[hlavičkový soubor]] <code>math.h</code> definice matematických funkcí, které jsou k &nbsp;dispozici v &nbsp;knihovně <code>libm</code> pro [[C (programovací jazyk)|programovací jazyk C]]. Hlavičkový soubor definuje prototypy funkcí, pomocí kterých je nadefinováno, jaké jsou parametry a &nbsp;jaké jsou návratové hodnoty (výsledky). Například [[Manuálové stránky (Unix)|manuálová stránka]] pro funkci <code>sqrt()</code> (dostupná například příkazem <code>man 3 sqrt</code>) popisuje funkci takto (zkráceno):
 
SYNTAXE
#include <math.h>
double sqrt (double &nbsp;x);
float sqrtf (float &nbsp;X);
POPIS
Funkce sqrt() vypočítá druhou odmocninu z &nbsp;argumentu.
NÁVRATOVÝ KÓD
Při úspěšném výpočtu je vrácena druhá odmocnina (jestliže X je reálné a &nbsp;kladné).
 
Funkce tedy vrací druhou odmocninu kladného desetinného čísla (jednoduché nebo dvojnásobná přesnosti) jako desetinné číslo. API je zde pro jazyk C popsáno v &nbsp;manuálové stránce.
 
== API v &nbsp;objektově-orientovaném jazyce ==
{{Upravit část}} <!-- text je jako strojový překlad -->
V &nbsp;[[Objektově orientovaný jazyk|objektově orientovaných jazycích]], API obvykle obsahuje popis souboru a &nbsp;definic tříd, a &nbsp;chování spojených s &nbsp;těmito třídami. Chování je soubor pravidel, jak objekt, odvozený z &nbsp;této třídy bude jednat v &nbsp;daných situacích. Tento abstraktní pojem, je spojen se skutečnou exponenciální funkcí, nebo zpřístupněny pro třídy, které jsou prováděny, pokud jde o &nbsp;[[Třída (programování)|třídy]] metod.
 
API v &nbsp;tomto případě může být chápána jako souhrn všech způsobů veřejných tříd (obvykle nazvaná jako třída rozhraní). To znamená, že API stanoví metody, které zvládají objekty odvozené z &nbsp;definic tříd. Obecněji, jeden může vidět API jako sbírku všech možných objektů, které lze odvodit z &nbsp;definic tříd, a &nbsp;jejich chování. Použití je opět zprostředkováno metodami, ale v &nbsp;tomto výkladu, jsou metody chápány jako technické detaily, jak je implementováno chování.
 
Například: třída představující zásobník může vystavit veřejně dvě metody <code>push()</code> (přidat nové položky do zásobníku), a &nbsp;<code>pop()</code>(extrahovat poslední položku, v &nbsp;ideálním případě umístěnou na vrcholu zásobníku).
 
API v &nbsp;tomto případě mohou být vykládány jako dvě metody <code>pop()</code> a &nbsp;<code>push()</code>, nebo obecněji jako představa, že lze používat položky typu zásobníku, který implementuje chování zásobníku (hromada vystavila své top přidat / odebrat prvky).
 
Tento koncept lze provádět na místě, kde třída rozhraní API nemá metody pro všechno, ale pouze se s &nbsp;nimi asociuje . Například jazyk [[Java (programovací jazyk)|Java]] API obsahuje rozhraní <code>Serializable</code>, což je rozhraní, které vyžaduje třída, která implementuje její chování v &nbsp;serializovaném módě. To nevyžaduje mít žádné veřejné metody, ale vyžaduje, aby třída měla povolení zastoupení, které lze uložit kdykoliv. To obvykle platí pro všechny třídy containing, které jsou jednoduché a &nbsp;datové a &nbsp;nemají žádnou vazbu na externí zdroje nebo jedno otevřené připojení k &nbsp;souboru, vzdálený systém nebo externí zařízení.
 
V &nbsp;tomto smyslu, v &nbsp;[[Objektově orientovaný jazyk|objektově orientovaných jazycích]], API definuje sadu chování, případně zprostředkovaný soubor třídy metod. V &nbsp;těchto jazycích je API stále distribuována jako knihovna. Například jazyk Java knihoven, zahrnující soubor API, který je poskytovány ve formě [[JDK]] používaný vývojáři k &nbsp;vytváření nových Java programů. [[JDK]] obsahuje dokumentaci API v &nbsp;notaci [[Javadoc]]. Kvalita dokumentace k &nbsp;API je často určujícím faktorem jeho úspěchu, pokud jde o &nbsp;snadnost použití.
 
== Reference ==