🔌
Extender el Webservice API con recursos propios
Actualizado: 2024-12-01
La API Webservice de PrestaShop permite exponer datos de tu modulo como recursos REST. Los clientes pueden leer, crear, modificar y eliminar registros usando los mismos patrones que con los recursos del core (productos, pedidos, clientes...).
#Registrar el hook
Registrar hookAddWebserviceResources en install()
php
<?php
public function install(): bool
{
return parent::install()
&& $this->registerHook('addWebserviceResources');
}
/**
* Define los recursos del modulo en el Webservice.
* Clave: nombre del endpoint (URL)
* Valor: clase que gestiona el recurso
*/
public function hookAddWebserviceResources(): array
{
return [
'mymodule_items' => [
'description' => 'Items del modulo MyModule',
'class' => 'WebserviceMyModuleItem',
'object' => 'MyModuleItem', // ObjectModel class
],
];
// Endpoint resultante: /api/mymodule_items
}
#Crear la clase del recurso
classes/webservice/WebserviceMyModuleItem.php
php
<?php
/**
* Webservice resource para MyModuleItem.
* Archivo: modules/mymodule/classes/webservice/WebserviceMyModuleItem.php
*/
class WebserviceMyModuleItem extends WebserviceRequestCore
{
/**
* Define los campos que expone el endpoint.
* Coinciden con los campos del ObjectModel.
*/
public static $content_type = 'items';
public static $endpoint_method = ['GET', 'POST', 'PUT', 'DELETE'];
/**
* Si no se sobreescribe, PS usa el ObjectModel directamente.
* Sobreescribir para filtrar datos o añadir logica extra.
*/
}
#ObjectModel como base del recurso
classes/MyModuleItem.php — ObjectModel para el recurso
php
<?php
if (!defined('_PS_VERSION_')) { exit; }
class MyModuleItem extends ObjectModel
{
public $name;
public $description;
public $active;
public $date_add;
public $date_upd;
public static $definition = [
'table' => 'mymodule_item',
'primary' => 'id_mymodule_item',
'fields' => [
'name' => ['type' => self::TYPE_STRING, 'validate' => 'isCleanHtml', 'size' => 255, 'required' => true],
'description' => ['type' => self::TYPE_HTML, 'validate' => 'isCleanHtml'],
'active' => ['type' => self::TYPE_BOOL, 'validate' => 'isBool'],
'date_add' => ['type' => self::TYPE_DATE, 'validate' => 'isDate'],
'date_upd' => ['type' => self::TYPE_DATE, 'validate' => 'isDate'],
],
];
}
#Probar el endpoint
Probar el endpoint con cURL
bash
# Listar todos los items
curl -X GET "https://tutienda.com/api/mymodule_items" \
-u "TU_API_KEY:" \
-H "Accept: application/json"
# Obtener un item por ID
curl -X GET "https://tutienda.com/api/mymodule_items/1" \
-u "TU_API_KEY:"
# Crear un item
curl -X POST "https://tutienda.com/api/mymodule_items" \
-u "TU_API_KEY:" \
-H "Content-Type: application/json" \
-d '{"mymodule_item":{"name":"Nuevo item","active":1}}'
# Actualizar
curl -X PUT "https://tutienda.com/api/mymodule_items/1" \
-u "TU_API_KEY:" \
-H "Content-Type: application/json" \
-d '{"mymodule_item":{"name":"Nombre actualizado"}}'
La API key necesita permisos explicitos
Despues de instalar el modulo, ve al BO > Parametros avanzados > Servicios web y concede permisos GET/POST/PUT/DELETE al recurso mymodule_items para la API key que uses.
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.