CodeIgniter: Как создать RESTful API в CodeIgniter 4 шаг за шагом
Как Вы можете создать RESTfuI API в Codeigniter 4? Это будет полезно, если вы хотите управлять фронт-эндом с помощью таких технологий, как React, Angular, Vue и т.д. CodeIgniter REST API может выполнить ваше требование по обработке запросов в бэкенде. REST API будет обрабатывать запрос, отправленный через внешнее приложение. Он будет управлять запросом, а после обработки вы получите ответ. Это простая архитектура обмена данными на основе запроса к внешнему приложению. В этом посте вы научитесь создавать REST API в CodeIgniter 4. Здесь мы рассмотрим различные типы запросов, которые будут использоваться при обработке запросов. Чаще всего с формой используются методы GET и POST. Но в REST API мы увидим GET, POST, PUT и DELETE.
Для создания RESTful API в CodeIgniter 4 мы создадим новый проект.
Предварительные условия
Чтобы создать проект в CodeIgniter 4, ваша система должна иметь следующие конфигурации.
- PHP >= 7.3
- MySQL (версия > 5)
- Сервер Apache/Nginx
- Редактор кода VS Code
- Composer
- Postman
Как только вы будете готовы, создайте новый проект с помощью composer.
Создание нового проекта для REST API в Codeigniter 4
Сначала откройте терминал или командную строку, которую вы используете. Теперь выполните приведенную ниже команду, чтобы создать новый проект.
composer create-project codeigniter4/appstarter ci4-rest-api
Команда создаст новую папку. Затем внутри папки она установит файлы и зависимости Codeigniter 4.
После создания проекта откройте его в редакторе VS Code для настройки.
Окружение проекта и конфигурация базы данных
После того, как вы открыли проект в редакторе VS Code, просто найдите файл env. Теперь вам нужно переименовать его в .env. Затем перейдите в этот файл (.env). По умолчанию все конфигурации окружения закомментированы внутри файла .env.
Для начала, вы должны раскомментировать CI_ENVIRONMENT и изменить production на development.
Затем, прокрутите вниз и найдите раздел конфигурации базы данных. Добавьте учетные данные базы данных, как показано ниже.
database.default.hostname = localhost
database.default.database = ci4_rest_api
database.default.username = root
database.default.password = root
database.default.DBDriver = MySQLi
database.default.DBPrefix =
Конфигурация базы данных будет выглядеть так, как показано ниже.
Теперь перейдем к миграции для REST API CodeIgniter 4.
Создание миграции в CodeIgniter 4 для REST API
В этом демонстрационном примере RESTful API я буду выполнять CRUD-операции для студентов. Следовательно, для этого потребуется таблица базы данных. Следовательно, я собираюсь создать файл миграции для управления схемой.
Чтобы создать схему в CodeIgniter 4, вы можете выполнить приведенную ниже команду spark.
php spark make:migration Student
Это создаст новый файл в папке app/Database/Migrations.
После создания миграции давайте добавим приведенную ниже схему. Пока мы добавим несколько полей. Вы можете добавить больше, если потребуется.
timestamp_Student.php
<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Migration;
class Student extends Migration
{
public function up()
{
$this->forge->addField([
'id' => [
'type' => 'INT',
'auto_increment' => true
],
'name' => [
'type' => 'VARCHAR',
'constraint' => '100'
],
'email' => [
'type' => 'VARCHAR',
'constraint' => '100'
],
'created_at datetime default current_timestamp',
'updated_at datetime default current_timestamp on update current_timestamp'
]);
$this->forge->addKey('id', true);
$this->forge->createTable('students');
}
public function down()
{
$this->forge->dropTable('students');
}
}
Теперь, на следующем этапе, эта схема должна быть перенесена в базу данных. Следовательно, существует команда для миграции созданной схемы в настроенную базу данных.
php spark migrate
Это займет пару секунд для создания дампа в базе данных на основе имеющегося файла миграций.
Теперь у вас есть таблица. На следующем этапе давайте создадим модель, соответствующую этой таблице. Следовательно, давайте сделаем это.
Создание модели в CodeIgniter 4 для REST API
Для того, чтобы создать модель, используйте приведенную ниже команду.
php spark make:model Student
Будет создана модель Student
После создания модели перейдите в класс модели и добавьте приведенные ниже фрагменты.
Student.php
<?php
namespace App\Models;
use CodeIgniter\Model;
class Student extends Model
{
protected $DBGroup = 'default';
protected $table = 'students';
protected $primaryKey = 'id';
protected $useAutoIncrement = true;
protected $insertID = 0;
protected $returnType = 'array';
protected $useSoftDeletes = false;
protected $protectFields = true;
protected $allowedFields = ['name', 'email'];
// Dates
protected $useTimestamps = false;
protected $dateFormat = 'datetime';
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
protected $deletedField = 'deleted_at';
}
В модели мы настроили имя таблицы. Также мы установили допустимые поля в соответствии со схемой таблицы Student. Теперь пришло время создать RESTful контроллер в CodeIgniter 4.
Создание RESTful контроллера в CodeIgniter 4 для REST API
В Codeigniter 4 можно создать базовый класс контроллера или класс RESTful. Для нашего приложения мы собираемся создать RESTful API. Поэтому для него необходим restful контроллер.
Поэтому в терминале выполните следующую команду с заданным флагом.
php spark make:controller Students --restful
Здесь флаг --restful будет генерировать функции по умолчанию в контроллере для операций CRUD.
Добавление функций для RESTful API в контроллер
В классе контроллера Student вы заметите, что он расширяет ResourceController. В этом базовом классе есть предопределенные методы для управления функциональностью CRUD, такие как -
- index
- create
- new
- show
- edit
- update
- delete
Здесь мы не будем принимать входные данные из формы. Поэтому мы не будем использовать все вышеперечисленные методы в контроллере Students.
Students.php
<?php
namespace App\Controllers;
use App\Models\Student;
use CodeIgniter\RESTful\ResourceController;
class Students extends ResourceController
{
private $student;
public function __construct()
{
$this->student = new Student();
}
/**
* Return an array of resource objects, themselves in array format
*/
public function index()
{
$students = $this->student->findAll();
return $this->respond($students);
}
/**
* Return the properties of a resource object
*/
public function show($id = null)
{
$student = $this->student->find($id);
if ($student) {
return $this->respond($student);
}
return $this->failNotFound('Sorry! no student found');
}
/**
* Create a new resource object, from "posted" parameters
*/
public function create()
{
$validation = $this->validate([
'name' => 'required',
"email" => "required|valid_email|is_unique[students.email]|min_length[6]",
]);
if (!$validation) {
return $this->failValidationerrors($this->validator->getErrors());
}
$student = [
'name' => $this->request->getVar('name'),
'email' => $this->request->getVar('email')
];
$studentId = $this->student->insert($student);
if ($studentId) {
$student['id'] = $studentId;
return $this->respondCreated($student);
}
return $this->fail('Sorry! no student created');
}
/**
* Add or update a model resource, from "posted" properties
*/
public function update($id = null)
{
$student = $this->student->find($id);
if ($student) {
$validation = $this->validate([
'name' => 'required',
"email" => "required|valid_email",
]);
if (!$validation) {
return $this->failValidationerrors($this->validator->getErrors());
}
$student = [
'id' => $id,
'name' => $this->request->getVar('name'),
'email' => $this->request->getVar('email')
];
$response = $this->student->save($student);
if ($response) {
return $this->respond($student);
}
return $this->fail('Sorry! not updated');
}
return $this->failNotFound('Sorry! no student found');
}
/**
* Delete the designated resource object from the model
*/
public function delete($id = null)
{
$student = $this->student->find($id);
if ($student) {
$response = $this->student->delete($id);
if ($response) {
return $this->respond($student);
}
return $this->fail('Sorry! not deleted');
}
return $this->failNotFound('Sorry! no student found');
}
}
После добавления функций, добавим маршруты для выполнения функций.
Добавление RESTful маршрута в CodeIgniter 4
Для добавления маршрута перейдите в config/Route.php и добавьте маршрут. Мы создали restful контроллер. Поэтому для выполнения всех его методов нам не нужен отдельный маршрут. Вместо этого будет работать единственный маршрут.
Routes.php
$routes->resource('students');
Это все, что касается функциональности. Теперь мы готовы протестировать наш RESTful Api в CodeIgniter 4.
Результаты работы RESTful API в CodeIgniter 4
Для тестирования результатов API откройте Postman. Начнем с создания нового студента.
POST-запрос - Создать студента
Endpoint: http://localhost:8080/students
Request Type: POST
Request Body:
{
"name": "John Doe",
"email": "johndoe@test.com"
}
Для начала, откройте API endpoint без запроса Body. Таким образом, мы сможем увидеть сообщение об ошибке валидации. В приведенном ниже результате видно, что мы обратились к API без запроса Body. В ответе мы получили ошибку валидации для полей "name" и "email".
Если вы ввели только имя (поле "name"), а электронную почту пропустили (поле "email"). В этом случае вы также получите ошибку валидации.
Далее мы укажем имя, но адрес электронной почты не является валидным. Мы получим ответ для валидации адреса электронной почты.
Итак, это была базовая валидация данных. Теперь давайте заполним необходимые данные. Если студент создан, то в ответе вы получите вставленные данные.
Создадим несколько записей, чтобы мы могли проверить GET-запрос.
GET-Запрос - Получить всех студентов
Для получения всех студентов измените метод запроса на GET. Удалив Request Body.
Endpoint: http://localhost:8080/students
Request Type: GET
В ответ вы получите список всех студентов, как показано ниже.
Получить одного студента
Если вы хотите получить подробную информацию о студенте, то в качестве параметра вам нужно передать id этого студента.
Endpoint: http://localhost:8080/students/{id}
Request Type: GET
В результате вы получите данные заданного идентификатора (id).
В случае, если вы укажете идентификатор, который не принадлежит ни одному студенту, он выдаст ответ 404 not found.
PUT-запрос - Обновление записи
Для обновления любого поля конкретного студента необходимо использовать PUT-запрос.
Endpoint: http://localhost:8080/students/{id}
Request Type: PUT
Request Body:
{
"name": "John Doe",
"email": "johndoe@test.com"
}
Давайте посмотрим на результат, обновив электронную почту заданного студента.
Если поле было обновлено, он вернет обновленные данные, как показано выше.
При обновлении студента, если вы введете недопустимый идентификатор, который не принадлежит ни одному студенту, то будет возвращена ошибка 404.
Проверка также будет применяться к API обновления для тела запроса (Request Body).
DELETE-запрос - для удаления записи
Для удаления записи студента у нас есть DELETE-запрос. Передайте id студента, который будет удален.
Endpoint: http://localhost:8080/students/{id}
Request Type: DELETE
Если введенный идентификатор не принадлежит ни одному студенту, то будет выдано сообщение 404.
Если указанный идентификатор принадлежит какому-либо студенту, то будет возвращена запись об удаленнии студента.
Вывод
Мы создали RESTful API для базового CRUD-приложения в CodeIgniter 4. В этом уроке мы попытались дать вам базовую демонстрацию RESTful API. Мы увидели, как мы обрабатывали различные типы запросов в CodeIgniter 4 с помощью маршрутизации ресурсов. CodeIgniter 4 предоставляет Restful контроллер для обработки CRUD операций. Надеюсь, это руководство будет вам полезно.
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.