Написване на собствен API за сайта с помощта на Apache, PHP и MySQL
Как започна всичко
И тогава исках да напиша собствен API за взаимодействие със сървърната страна - най-вече от практически интерес.
Входни данни
Имах на разположение:
Сървър - Apache, PHP 5.0, MySQL 5.0
Клиент - Android, iOS устройства, всеки браузър
Реших, че ще използвам формата на данни JSON за заявки и отговори от сървъра - за неговата простота и естествена поддръжка в PHP и Android. Тук iOS ме разстрои - няма поддръжка на JSON (трябваше да използвам разработка на трети страни тук).
Също така беше решено, че заявките могат да бъдат изпращани както чрез GET, така и чрез POST заявки ($ _REQUEST в PHP е помогнат тук). Това решение позволява тестване на API чрез GET заявки във всеки наличен браузър.
Пътят до папката api - директорията, към която трябва да направите заявки, в основата на която е файлът index.php - той отговаря за извикването на функции и обработката на грешки
Името api - за удобство реших да отделя API групите - потребител, база данни, съдържание и т.н. В този случай всеки api получи своето име.
Име на метод - името на метода, който трябва да бъде извикан в посочения api
JSON - низово представяне на JSON обект за параметри на метода
API скелет
Скелетът на API от страна на сървъра се състои от няколко основни класа:
index.php - индексният файл на директорията в Apache, той получава всички API извиквания, анализира параметри и извиква API методи
MySQLiWorker - единичен клас за работа с база данни на MySQL чрез MySQLi
apiBaseCalss.php - родителският клас за всички API в системата - всеки API трябва да бъде наследен от този клас, за да работи правилно
apiEngine.php - основният клас на системата - анализира предадените параметри (след предварителното им анализиране в index.php), свързва необходимия клас api (чрез метода require_once), извиква необходимия метод в него и връща резултата в JSON формат
apiConstants.php - клас с константи за api повиквания и предаване на грешки
apitest.php - тестов api за тестване на нови методи преди включването им в производство
Целият механизъм изглежда така:
Правим заявка към сървъра - например www.example.com/api/?apitest.helloWorld = <>
От страна на сървъра файлът index.php анализира предадените параметри. Index.php винаги взема само първия елемент от списъка на предадените параметри $ _REQUEST - това означава, че конструкция като www.example.com/api/?apitest.helloWorld=<>&apitest.helloWorld2 - ще извика само метода helloWorld в apitest. Извикването на метода helloWorld2 ще се провали.