¿CodeIgniter 4 Rest Api – Cómo crearla?


CodeIgniter 4 Rest Api

En este artículo veremos cómo crear una API Rest en CodeIgniter 4, con el uso de clases y métodos que incorpora en esta versión 4.

¿Cómo crear una API REST en Codeigniter 4?

Primero partiremos de nuestro controlador, esto está en nameApp/app/Controller/Users.php, vamos a crear una api rest de tipo CRUD para realizar operaciones con los usuarios, recuerda configurar previamente una base de datos con sus tablas o utiliza las migraciones en codeigniter 4


// import the trait
use CodeIgniter\API\ResponseTrait;

// import the model
use App\Models\UserModel;

	class Users extends BaseController
	{
	// use the trait
	use ResponseTrait;

	// we declare the variables
	protected $UserModel;			

	protected $validation;	


	public function __construct()
	{

	$this->UserModel = new UserModel();

	// load the helper form
	helper('form');				

	// load the validation service
	$this->validation =  \Config\Services::validation();

	}			
				
	}			

	}
		

¿Cómo funcionan las rutas en codeigniter 4?

Ahora vamos con las rutas, las rutas están en nameApp/app/Config/Routes.php, crearemos una ruta de tipo resource, recuerda deshabilitar el método setAutoRoute(false), ya que si lo dejamos en true podemos ingresar con el nombre de la clase / nombre del controlador.

Rest Api

Ahora vamos a listar las rutas asociadas a los users de nuestro controlador, que es el nombre de la clase que estamos pasando.


	php spark routes
		

Y de esta manera listaríamos todas las rutas asociadas a nuestros métodos de controlador y cada uno de los endpoints, donde podemos usar herramientas como Postman, para probar apis en el formato json o cualquier otro, recuerden que las peticiones de tipo post y put/patch se realizan por medio del body, conoce mas sobre los formularios en codeigniter 4


CodeIgniter 4 Routes

Realizamos una primera petición al método index con su ruta asociada de tipo GET, el cual nos devuelve un status code del tipo 200 en caso de ser exitoso en formato json

public function index()
{		

$data['users'] = $this->UserModel->findAll();

return $this->respond($data);

}

Continuamos con una petición de tipo POST a la ruta asociada, la cual apunta al método create, haremos uso de validación de campos, en caso contrario de no pasar la validación desplegamos una excepción, en caso de ser positivo la petición nos devuelve un status code de 201


public function create()
	{

		$rules = [
			'first_name' => [
				'rules'  => 'required',
				'errors' => [
					'required' => 'Nombre es requerido.'
				]
			],
			'last_name' => [
				'rules'  => 'required',
				'errors' => [
					'required' => 'Apellido es requerido.'
				]
			],
			'password' => [
				'rules'  => 'required',
				'errors' => [
					'required' => 'Password es requerido.'
				]
			],
			'email'    => [
				'rules'  => 'required|valid_email',
				'errors' => [
					'required' => 'Email es requerido.',
					'valid_email' => 'Verifica el email.'
				]
			],
		];		

		$data = $this->request->getPost();		


		if (!$this->validate($rules)) {

			$errors = $this->validator->listErrors();
			

			return $this->failValidationError();
			
		}else{

			$data = $this->UserModel->save($data);

			return $this->respondCreated($data);
		}		
		
	}

Es momento de realizar una petición del tipo GET con parámetros, en este caso el id, el cual nos devuelve un status code 200


public function show($id)
	{
		if (!$data = $this->UserModel->find($id)) {			

			throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound("Un error a ocurrido");			

		}else{

			return $this->respond($data);
		}		
		
	}

Continuamos con una petición del tipo PUT o PATCH, la lógica es la misma que usamos en el método show


public function update($id)
	{
		$data = $this->request->getRawInput();		

		if (!$user = $this->UserModel->find($id)) {

			return $this->failNotFound('Usuario con  id nro:'.$id.' no encontrado.');
			
		}else{

			$data['user'] = $this->UserModel->update($id,$data);

			return $this->respond($data);
		}	
	}

Finalizamos con una petición del tipo DELETE, donde podemos agregar una lógica extra con un mensaje de respuesta


public function delete($id)
	{
		if ($data = $this->UserModel->delete($id)) {			

			return $this->respondDeleted();			
		}		
	}

Esta fue una forma de crear un api restful de tipo crud en codeigniter 4