Creando tu primera API
Una vez instalado el framework y creada la estructura de carpetas básicas podemos empezar a desarrollar nuestras Primeras APIs.
Las APIs en el framework son piezas de código que extienden la clase RESTFul y que facilitan la creación de logica y la respuesta correspondiente normalmente en formato JSON.
Por defecto la carpeta que contiene las apis están en la carpeta /api, pero se puede configurar una carpeta complementaria (carpeta donde buscar el código de nuestra API en caso de que no se encuentre en la carpeta /api) añadiendo la variable de configuración con config.json: core.api.extra_path
"core.api.extra_path": "gs://bucket-name/folder-name",
"development: Vars to work in development": {
"core.api.extra_path": "{{rootPath}}/bucket-name/folder-name"
}
Bajo la carpeta /api (o bajo la carpeta "core.api.extra_path") crearemos ficheros {api-name}.php con estructura básica (ejemplo hello.php)
class API extends RESTful
{
function main()
{
$this->addReturnData('Hello World');
}
}
Lo que permitirá que nuestro proyecto responda un Hello World: https://{server}/{api-name}
Si lanzamos el servidor local de desarrollo
php -S 0.0.0.0:8080 vendor/cloudframework-io/backend-core-php8/src/dispatcher.php
Podremos acceder a la URL: http://localhost:8080/hello
{
"success":true,
"status":200,
"code":"ok",
"data":"Hello World"
}
Estructura base para programar un API recomendada
Ejemplo /api/hello.php recomendado
<?php
/**
* Basic structure for a CloudFramework API
* last-update 2024-01
* Author: CloudFramework.io
*/
class API extends RESTful
{
var $end_point= '';
function main()
{
//You can restrict methods in main level
if(!$this->checkMethod('GET,POST,PUT,DELETE')) return;
//Call internal ENDPOINT_$end_point
$this->end_point = str_replace('-','_',$this->params[0] ?? 'default');
if(!$this->useFunction('ENDPOINT_'.$this->end_point)) {
return($this->setErrorFromCodelib('params-error',"/{$this->service}/{$this->end_point} is not implemented"));
}
}
/**
* Endpoint to add a default feature. We suggest to use this endpoint to explain how to use other endpoints
*/
public function ENDPOINT_default()
{
// return Data in json format by default
$this->addReturnData([
"end-point default [current]"=>"use /{$this->service}/default"
,"end-point hello"=>"use /{$this->service}/hello"
,"Current parameters"=>$this->params
,"Current formParameters"=>$this->formParams]);
}
/**
* Endpoint to show Hello World message
*/
public function ENDPOINT_hello()
{
//You can restrict methods in endpoint level
if(!$this->checkMethod('GET,POST,PUT,DELETE')) return;
// return Data in json format by default
$this->addReturnData('Advanced hello World');
}
}