Dělal jsem v php API pro komunikaci s mobilní aplikaci (Android+iOS). Používal jsem ORM Propel
http://www.propelorm.org, který považuju v rámci php zvyklostí za kvalitní, pro některé operace jsem psal vlastní sql (Propel to umožňuje). Requesty i response se posílaly v xml, běžné chybové stavy, na které mobilní aplikace uměla reagovat, se posílaly uvnitř xml odpovědi s http kódem 200, kód byl odlišný od 200 jen v případě fatálních chyb - těch, které vylučovaly smysluplné pokračování v akci. Pro čtení a vytváření xml jsem používal Simplexml. Xml se validovalo proti ručně psanému dtd. Databáze byla Postgres, bylo tam poměrně dost uložených procedur. Fungovalo to, ale s vrstvícími se požadavky a rozšířeními se množily různé neobratnosti, které vyplývaly hlavně z nedokonalostí simplexml a php. Modulárnost a znovupoužitelnost nic moc.
Když to hodnotím s odstupem, nevymýšlel bych dnes vlastní formát xml, použil bych hotové řešení. Knihovny pro php nejsou žádný zázrak. Osobně bych to psal v javě a pro samotnou komunikaci použil nějakou knihovnu pro messaging nebo RPC - takovou, které funguje na Androidu i na serveru. Pokud by uměla víc jazuků, vzal bych to, protože nikdy nevíš, kde všude se bude služba dál používat. Pokud bych na serveru potřeboval ORM, použil bych
http://javalite.io/activejdbc a pokud bych potřeboval i web připojil bych
http://javalite.io/activeweb Nezahrnuje to ale administrační rozhraní. Pokud bych ho potřeboval, použil bych
http://www.brightspot.com/ tam se podle datového modelu automaticky generuje administrační rozhraní, pro persistenci je použita sql databáze - ale jen jako storage, nepracuje se tam běžným sql stylem. S Brightspot bych nicméně udělal nejdřív nějakou pilotní verzi, kód toho frameworku otevřeli teprve nedávno a podpora a komunikace autorů je asi tak nějak „jak zbyde čas“. Na druhou stranu to ušetří spoustu času právě s tím administračním rozhraním a framework je evidentně používaný už delší dobu a to i na větších projektech.
Nicméně, jestli to API má mít jen dvě metody iniciované z klienta a jestli nebudou přibývat další metody, tak stačí poslat dva http požadavky a není třeba vstřebávat nějaké frameworky nebo budovat nějaké velké API. Takže záleží hlavně na požadavcích a komplexnosti - kolik metod, push nebo pull? data budou binární nebo textová? bude to synchroní nebo asynchroní? kolik klientů to má zvládnout, bude nějaký load balancing? atd...
Tož nevím jetli jsem pomohl :-)