php restful api framework
Comet — PHP-фреймворк для быстрых REST API
Два года я писал микросервисы на Go, используя генераторы кода на базе Swagger. Получались довольно компактные и очень быстрые решения.
Сейчас использую PHP, поэтому решил найти средства для решения тех же самых задач в экосистеме языка. Знаю и люблю Laravel и Symfony, но тащить их в проекты не хотелось — слишком много батареек, за которые приходится расплачиваться крутой кривой входа в проект и производительностью.
В итоге появился Comet — современный фреймворк на базе PHP для разработки быстрых API, использующий наработки команд SlimPHP и Workerman. Десятки тысяч RPS на обычной виртуальной машине и латенси менее миллисекунды!
Чтобы не быть голословным, приведу результаты тестирования Comet и других популярных фреймворков. Для более честного сравнения, все тяжелые модули вроде ORM были удалены из сборки всех участников теста.
Первый кейс — имитация highload-нагрузки в виде тысяч конкурентных запросов wrk на метод, возвращающую в виде простого текста строчку приветствия «Hello, World!»:
Для оценки минимальной задержки использовался вариант, в котором единственный клиент последовательно отправлял по одному запросу на тот же самый ендпойнт:
Как видно из результатов, особенности архитектуры Comet позволяют обрабатывать в десять раз больший поток запросов с минимальными задержками, чем традиционные фреймворки.
Давайте заглянем в код, чтобы получить представление о том, с чем придется столкнуться в реальной разработке на Comet:
Все довольно прозрачно: использование роутера и замыканий обеспечивает компактный код, более похожий на то, к чему привыкли разработчики NodeJS / Express.
Я выложил на GitHub весь код и планирую расширять возможности фреймворка:
Буду рад комментариям, коммитам и, конечно — использованию Comet в реальных проектах 🙂
Простой RESTful-сервис на нативном PHP
Почти любой php-фреймворк умеет делать это из коробки. Например, Laravel, где роутинг реализован понятно и просто. Но что если нам не нужно прямо сейчас заниматься изучением новой большой темы, а хочется просто быстро завести проект с поддержкой REST API? Об этом и пойдет речь в статье.
Что должен уметь наш RESTful-сервис?
1. Поддерживать все 5 основных типов запросов: GET, POST, PUT, PATCH, DELETE.
2. Разруливать разнообразные маршруты вида
POST /goods
PUT /goods/
GET /users/
и прочие сколь угодно длинные цепочки.
Какой функционал мы будем поддерживать?
Для товаров возможности следующие:
По пользователям для разнообразия рассмотрим несколько вариантов с GET
Как это заработает на нативном PHP?
.htaccess
index.php
Рассмотрим index.php строка за строкой. Для начала получим метод запроса.
Затем данные из тела запроса
Теперь у нас есть все данные, нужно сделать с ними что-нибудь полезное. А сделают это всего лишь 4 строки кода
GET /goods/
В ответе клиенту мы выводим нужные данные: название товара и его цену. id товара и метод в реальном приложении совершенно не обязательны. Покажем их только, чтобы убедится, что вызывается нужный метод с правильными параметрами.
Давайте попробуем на примере: откройте консоль браузера и выполните код
В конце функции мы написали такой код.
По http-кодам ответов сервера
Мы не будем заморачиваться с выводом разных кодов, хотя по REST-у это и стоит делать. Клиентских ошибок много. Даже в нашем простом случае уместна 405 в случае неправильно переданного метода. Намеренно не хочу усложнять.
В случае успеха сервер у нас всегда вернет 200 ОК. По хорошему, при создании ресурса стоит отдавать 201 Created. Но опять-таки в плане упрощения эти тонкости мы отбросим, а в реальном проекте Вы их легко реализуете сами.
По совести говоря, статья закончена. Думаю, Вы уже поняли подход, каким образом разруливаются все маршруты, вынимаются данные, как это протестировать, как добавлять новые запросы и т.д. Но я для завершения образа приведу реализацию оставшихся 7 запросов, которые мы обозначили в начале статьи. Попутно приведу пару интересных замечаний, а в конце выложу архив с исходниками.
POST /goods
Добавление нового товара
PUT /goods/PATCH /goods/
Частичное обновление товара
DELETE /goods/GET /users/GET /users//info
GET /users//info
Общая информация о пользователе
GET /users//orders
Получение списка заказов пользователя
Итоги и исходники
В данной статье вы узнаете, как создать простой REST API в PHP.
1. Обзор проекта
1.1 Что такое REST API?
REST API позволяет вашему приложению взаимодействовать с одним или несколькими различными приложениями, используя концепции REST.
1.2 Зачем нужен REST API?
Во многих приложениях REST API необходим, потому что это самый легкий способ создания, чтения, обновления или удаления информации между различными приложениями через Интернет или протокол HTTP. Эта информация представляется пользователю в одно мгновение, особенно если вы используете JavaScript для отображения данных на веб-странице.
1.3 Где используется REST API?
REST API может использоваться любым приложением, которое может подключаться к Интернету. Если данные из приложения могут быть созданы, прочитаны, обновлены или удалены с помощью другого приложения, это обычно означает, что используется REST API.
2. Файловая структура
3. Настройка базы данных
3.1 Создание таблицы категорий
3.2 Дамп данных для таблицы категорий
3.3 Создание таблицы товаров
3.4 Дамп данных для таблицы товаров
3.5 Подключение к базе данных
Приведенный ниже код показывает учетные данные базы данных и метод для получения подключения к базе данных с помощью PDO.
Создайте папку api и откройте её. Создайте папку config и в ней создайте файл database.php со следующим кодом.
4. Получение товаров
4.1 Создание объекта Product
Код ниже содержит класс с именем Product и несколько свойств. Также показан метод конструктора, который принимает соединение с базой данных.
4.2 Создание файла для чтения товаров
Код ниже содержит заголовки о том, кто может читать этот файл и какой тип содержимого он будет возвращать.
4.3 Подключение к базе данных и таблице товаров
Замените комментарий // подключение к базе данных будет здесь в файле read.php следующим кодом.
4.4 Чтение товаров из базы данных
Замените комментарий // чтение товаров будет здесь в файле read.php следующим кодом.
4.5 Создание метода read()
4.6 Уведомление пользователя о том, что товары не найдены
Замените комментарий // ‘товары не найдены’ будет здесь в файле read.php следующим кодом.
5. Создание товаров
5.1 Создание файла create.php
Откройте папку product и создайте в ней файл create.php со следующим содержимым.
5.2 Создание метода create()
6. Получение одного товара
6.1 Создание файла read_one.php
6.2 Создание метода readOne()
7. Обновление товара
7.1 Создание файла update.php
7.2 Создание метода update()
8. Удаление товара
8.1 Создание файла delete.php
Откройте папку product и создайте файл delete.php со следующим содержимым.
8.2 Создание метода delete()
9. Поиск товаров
9.1 Создание файла search.php
В папке product создайте файл search.php со следующим кодом.
9.2 Создание метода search()
10. Пагинация товаров
10.1 Создание файла read_paging.php
В папке product создайте файл read_paging.php со следующим кодом.
10.2 Создание файла core.php
Этот файл содержит нашу базовую конфигурацию, такую как базовый URL и переменные пагинации.
Откройте папку config и создайте в ней файл core.php со следующим содержимым.
10.3 Создание метода readPaging()
10.4 Создание метода count()
Так же в классе Product (файл product.php) добавьте метод count() для создания массива пагинации.
10.5 Получение массива пагинации
11. Получение категорий
11.1 Создание объекта Category
Откройте папку objects и создайте новый файл category.php со следующим кодом.
11.2 Создание файла read.php
Создайте новую папку category в корне, и в ней файл read.php со следующим кодом.
11.3 Создание метода read()
Если вам понравилась данная статья, рекомендую к прочтению создание регистрации и авторизации в php с использованием JWT.
Надеюсь, вам понравилась данная информация. Если вам интересна тема web-разработки, то можете следить за выходом новых статей в Telegram.
Top 7 Best PHP API Frameworks for REST APIs
Last Updated on April 20, 2021 by Robert Davis 2 Comments
There are many PHP Frameworks, but not all are easy to learn. Also, not all PHP Frameworks enable easy REST API development. In this article, we will review the most popular PHP API Frameworks that are actively developed. Also, they are optimized for REST APIs or Microservices. Microservices and APIs work together to support complex systems. Frameworks that are optimized for Microservices usually do well for APIs. But first, a little background is in order.
What is a REST API?
Design Constraints
There are 6 key constraints to consider when building a REST API:
Uniform interface
A REST API must use conventions for its interfaces like HTTP does with the standard methods of GET and POST. Each resource should map to a single endpoint (you can think of this as a webpage). This also means that a developer’s learning curve only applies to the first endpoint. They should be able to follow a similar approach for all other endpoints.
Client-server
There should be no coupling or dependency between the client and server applications in a REST API integration. Each side should be able to evolve independently of the other. This preserves a constant interface between them.
Stateless
Cacheable
Caching can happen in the client, not the server. Within the response from the API can be caching instructions. These tell whether the client can cache the supplied data and for how long.
Layered system
This constraint restricts knowledge of the server to the interface only. That means you can expand the underlying logic and data structure over time. This can happen without affecting the API interface so that remains constant.
Code on demand (optional)
Dr. Fielding referred to downloading Java applets when describing this constraint. But for a PHP REST API, it could mean that an API response includes executable code. This code can be in any client-side language (like Javascript). The code can activate a widget or perform some action within the client.
Main Criteria for inclusion in this list
The main criteria used for selecting the best PHP Frameworks for developing REST APIs are as follows:
Based on those three criteria, this is what I’ve found as a list of the top contenders for PHP API Frameworks:
What are the best PHP API Frameworks for REST APIs?
Lumen
The stunningly fast micro-framework by Laravel.
Guzzle
Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and trivial to integrate with web services.
Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs.
Other Notable PHP API Frameworks
Leaf PHP
Leaf is a PHP micro framework that helps you create clean, simple but powerful web apps and APIs quickly
PHP starter kit that helps you quickly write simple yet powerful web applications and APIs without any framework
On the GitHub home we see the beginning of a simple application:
Also, there is a LeafAPI package created specifically for API development. It replaces the View in “Model-View-Controller” design with a “Request-Response” layer.
Swoft
PHP Microservice Full Coroutine Framework
Ubiquity
PHP rapid development framework
Fat Free Framework
A powerful yet easy-to-use PHP micro-framework designed to help you build dynamic and robust web applications – fast!
This is another micro framework focused on fast development with a gentle learning curve. There is an active community in a google group as well as 403 questions on StackOverflow tagged fat-free-framework. There are 13 contributors and 35 releases in Github but the latest commit was over 5 months ago so it may not be actively developed anymore.
Conclusion
See below for a table of the PHP Frameworks we’ve discussed:
Summary: Best PHP Frameworks for REST APIs
PHP Framework | Focus of Framework | Learning Curve/Design Pattern | Github Statistics | StackOverflow Statistics |
---|---|---|---|---|
Lumen | Fast micro-services and APIs | Repository Pattern commonly used | 93 releases, 181 contributors, and last commit was 4 hours ago | Over 2000 questions tagged lumen |
Guzzle | HTTP requests and Microservice integration | Easier than CURL, no dictated design pattern | 124 releases, 313 contributors, and the last commit was 10 days ago. | Over 1900 questions tagged guzzle |
Slim | Simple yet powerful web applications and APIs. | Factory Method Pattern | 96 releases and 198 contributors in github. Latest commit is 8 days old. | 141 StackOverflow questions tagged both API and slim, and over 2600 tagged slim. |
Leaf PHP | Clean, simple, and powerful web apps and APIs. | Similar to MVC but modified for APIs. | 11 releases and 2 contributors. Latest commit one month old. | None yet |
Swoft | Coroutines | Concurrency design pattern | 24 contributors and 26 releases on Github. More active in Chinese than English. | None yet |
Ubiquity | Speed, not just for APIs | MVC design pattern | 10 contributors and 28 releases on Github. The latest commit was 2 days ago. | 25 questions tagged Ubiquity-Framework. |
Fat Free Framework | Fast learning curve | No specific pattern dictated | 13 contributors and 35 releases. But the latest commit was 5 months ago. | 403 questions tagged fat-free-framework |
Какой лучше выбрать PHP RESTful-фреймворк?
Необходимо выбрать php-фреймворке для добавления информации в БД (MySQL) через API.
ivan99, для меня phalcon, а для вас, попробуйте оба.
у фалкона преимущество в том, что он скомпилен в модуль, это очень быстро
оффтопик: а еще лучше golang, буквально неделя изучения и уже можно что-то сносное и очень быстрое написать, но это уже совсем другая история. )
Ну все фреймворки же подходят, в том числе и микро, к микро ORM присадить нужно
Сам я расматривал тоже:
1 Slim
2 Phalcon, либо
3 Спец. решения типа api-platform.com и др заточенного под создание АПИ
любой фреймворк.(их не так уж много)
Потому что слабое звено здесь не выбранный фреймворк, а «средний программист без ларавел образования».
Ответ не засчитан, один и тот же програмист на разных инструментах напишет тот же самый результат с разными трудозатратами, как то так. У разных фреймоврков разнятся как возможности так и перспективы.
качество тоже разное будет и результат работать в разных ситуациях по разному.
Даже на одном фреймворке разные программисты сделают по разному.
А советовать будут каждый свой фреймворк, это бессмысленные холиварные вопросы из разряда андроид или ios.
Все фреймворки имеют пакеты или поддержку всего что вам нужно для разработки любого апи.
При этом скорость и всё остальное практически полностью зависит от того как это реализовать.
Если вы не умеете в принципе писать нормальный код, то выбор «правильного» фреймворка вам ничем не поможет.
это не из моего вопроса а из моего комментария к вашему ответу гдле я показ что он неверен так как хороший програмист необязательно обязан знать ларавел
По всем остальным пунктам вам уже ответили и перечислили все возможные варианты.
Они ВСЕ умеют делать то что вам нужно. При этом скорость от фреймворка зависеть будет на сотую долю процента, и на 99.9% от кода написанного программистом, а не разработчиками фреймворка.
Сейчас плюс минус тонны сайтов делают JS фронтенд и бекенд отдельно, и при этом используют любые фреймворки для этих целей.
Если вы не используете никакой фреймворк то берите тот что больше понравится, может логотип красивее где-то или монетку бросьте.
Если вы будете искать программиста для вашей задачи, то пускай он сам делает с помощью тех инструментов с которыми он умеет работать. Ставить задачу с требованием фреймворка который вы сами не используете и вам пофиг какой он будет, но кто-то посоветовал это плохая идея.