Комментарии 25
Не знаю, лично мне было интересно. Никогда раньше не задумывался, как пишутся API
-7
Если я не ошибаюсь, то у вас в реализации существует серьезная уязвимость. При проверке существует ли метод в теле вы не проверяете входные переменные.
Например, при попытке вызова такого URL-а, для существующего контроллера:
www.example.com/api/?apitest.getApiEngineByName=test будет заинклуден файл test.php.
А если еще включена настройка allow_url_fopen, то можно будет вообще загрузить и подключить какой-нибудь шелл.
Например, при попытке вызова такого URL-а, для существующего контроллера:
www.example.com/api/?apitest.getApiEngineByName=test будет заинклуден файл test.php.
А если еще включена настройка allow_url_fopen, то можно будет вообще загрузить и подключить какой-нибудь шелл.
+2
Я с вами согласен здесь совершенно отсутствует реализация защиты. Собственно это планирую внедрить в следующей доработке.
Однако на ваш пример отвечаю: в ответ на запрос
www.example.com/api/?apitest.getApiEngineByName=test
Сервер вернет вот такой ответ:
{«response»:{},«error»:«Method getApiEngineByName does not exist»}
Однако на ваш пример отвечаю: в ответ на запрос
www.example.com/api/?apitest.getApiEngineByName=test
Сервер вернет вот такой ответ:
{«response»:{},«error»:«Method getApiEngineByName does not exist»}
-2
PDO? не, не слышал )
+4
В конце был удивлен этим: echo file_get_contents(«habrahabr.ru/i/error-404-monster.jpg»);. Ну и конечно «класс для констант» это нечно :D
+5
Если вы про это ru.wikipedia.org/wiki/PHP_Data_Objects, то слышал, слышал.
Но наверное не очень понял к чему это?
HP Data Objects (PDO) — расширение для PHP, предоставляющее разработчику простой и универсальный интерфейс для доступа к различным базам данных.
Я не ставил целью написать API для работы с БД. Например картинка в последнем методе не делает запросов к базе.
Но наверное не очень понял к чему это?
HP Data Objects (PDO) — расширение для PHP, предоставляющее разработчику простой и универсальный интерфейс для доступа к различным базам данных.
Я не ставил целью написать API для работы с БД. Например картинка в последнем методе не делает запросов к базе.
-1
Хотя вот все же не пойму, вот кусок из PDO Manual
$sql = 'SELECT name, color, calories FROM fruit ORDER BY name';
foreach ($conn->query($sql) as $row) {
print $row['name']. "\t";
print $row['color']. "\t";
print $row['calories']. "\n";
}
так в чем же разница от MySQLi?
MySQLi делает тоже самое.
— все равно писать свои запросы
— все равно делать выборки и обрабатывать их
— все равно есть Statement
$sql = 'SELECT name, color, calories FROM fruit ORDER BY name';
foreach ($conn->query($sql) as $row) {
print $row['name']. "\t";
print $row['color']. "\t";
print $row['calories']. "\n";
}
так в чем же разница от MySQLi?
MySQLi делает тоже самое.
— все равно писать свои запросы
— все равно делать выборки и обрабатывать их
— все равно есть Statement
+1
поддерживаю, было полезненько.
-8
НЛО прилетело и опубликовало эту надпись здесь
А какова максимально возможная длина URL? Если надо будет передавать бинарные данные на сервер, то их придётся конвертировать в base64, а влезет ли результат в URL?
-1
ИМХО не хорошо, что такая жесткая привязка к структуре файловой системы. Лучше было бы реализовать Front Controller. А использование mod_rewrite позволило бы сделать url более красивым ;)
Абсолютно непонятная мне мотивация, т.к. для тестирования запросов есть curl. А при разных типах запросов можно было бы выполнять различные действия, что логично.
Так же было принято решение, что запросы можно будет отсылать как через GET так и через POST запросы (здесь помог $_REQUEST в PHP). Такое решение позволило проводить тестирование API через GET запросы в любом доступном браузере.
Абсолютно непонятная мне мотивация, т.к. для тестирования запросов есть curl. А при разных типах запросов можно было бы выполнять различные действия, что логично.
+2
В PHP5 есть классовые константы: www.php.net/manual/en/language.oop5.constants.php
Если их использовать, то следующий класс будет выглядеть читабельнее, и «константы» будут действительно неизменяемыми.
Постараюсь в свободное время pull request сделать.
Если их использовать, то следующий класс будет выглядеть читабельнее, и «константы» будут действительно неизменяемыми.
class APIConstants {
//Результат запроса - параметр в JSON ответе
const RESPONSE = "response";
// ... И обращаться дальше, в apiEngine.php, можно следующим образом:
$response = APIConstants::RESPONSE;
Постараюсь в свободное время pull request сделать.
+1
Ещё очень важный момент: в запрос желательно включать версию API (и поддерживать несколько одновременно, естественно)
+4
По большему счету, API с выводом в JSON не отличается от обычного HTML вывода, а посему можно использовать любой фреймворк, только вместо сессий использовать базу данных и передаваемый токен для аутентификации и авторизации.
0
*facepalm.jpg* — не зря нас (похапэшников) троллят…
+8
Кстати, с iOS 5 появилась нативная поддержка JSON.
0
На серверной стороне файл index.php — производит парсинг переданных параметров. Index.php берет всегда только первый элемент из списка переданных параметров $_REQUEST — это значит что конструкция вида www.example.com/api/?apitest.helloWorld={}&apitest.helloWorld2 — произведет вызов только метода helloWorld в apitest. Вызова же метода helloWorld2 непроизойдет
Сломал мозк
0
Вот сижу и пытаюсь понять а в чем же разница (концептуально) между PDO и MySQLi.
Тут же на хабре нашел интересную статью
habrahabr.ru/post/141127/
И первый же момент
Выбирать нужно было между MySqli и PDO. После не очень длительного изучения решил остановиться на MySqli, так как, как мне тогда казалось, он полностью идентичен PDO, за исключением того, что нет возможности отказаться от MySQL в пользу чего-то другого. Как я напишу ниже это не совсем так, минимум одно заметное отличие есть.
MySqli рекомендован к использованию самими разработчиками PHP.[1]
Вот и не пойму? Это холивары такие: мы за PDO, MySQLi — г-но?
Кстати полностью согласен с комментом:
habrahabr.ru/post/141127/#comment_4718702
Тут же на хабре нашел интересную статью
habrahabr.ru/post/141127/
И первый же момент
Выбирать нужно было между MySqli и PDO. После не очень длительного изучения решил остановиться на MySqli, так как, как мне тогда казалось, он полностью идентичен PDO, за исключением того, что нет возможности отказаться от MySQL в пользу чего-то другого. Как я напишу ниже это не совсем так, минимум одно заметное отличие есть.
MySqli рекомендован к использованию самими разработчиками PHP.[1]
Вот и не пойму? Это холивары такие: мы за PDO, MySQLi — г-но?
Кстати полностью согласен с комментом:
habrahabr.ru/post/141127/#comment_4718702
0
Все пишут как создавать API, а как красиво документировать и тестировать — 0. Я уже давно использую Apiary, о нем как-то писал в своем блоге.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Пишем свой API для сайта с использованием Apache, PHP и MySQL