🔌 API Module + WebService Extension
Actualizado: 2026-04
#api_module — Nueva API PS 9
Demuestra como modificar y extender la nueva API de PrestaShop basada en API Platform v3. Requiere PS 9.0.0+.
Repositorio
github.com/PrestaShop/example-modules/tree/master/api_module
La nueva API usa API Platform con autenticacion OAuth2/JWT. Este modulo ensena como:
#Crear endpoints custom
Definir un recurso API con atributos PHP 8
php
<?php
// modules/api_module/src/ApiPlatform/Resources/MyResource.php
namespace PrestaShop\Module\ApiModule\ApiPlatform\Resources;
use ApiPlatform\Metadata\ApiResource;
use ApiPlatform\Metadata\Get;
use ApiPlatform\Metadata\GetCollection;
use ApiPlatform\Metadata\Post;
use PrestaShop\Module\ApiModule\ApiPlatform\Provider\MyResourceProvider;
#[ApiResource(
operations: [
new GetCollection(
uriTemplate: '/my-resources',
provider: MyResourceProvider::class,
scopes: ['my_module_read']
),
new Get(
uriTemplate: '/my-resources/{myResourceId}',
provider: MyResourceProvider::class,
scopes: ['my_module_read']
),
new Post(
uriTemplate: '/my-resources',
processor: MyResourceProcessor::class,
scopes: ['my_module_write']
),
]
)]
class MyResource
{
public int $myResourceId;
public string $name;
public string $description;
public bool $active;
}
#Scopes y autorizacion
Registrar scopes en services.yml
yaml
# modules/api_module/config/services.yml
services:
# Registrar scopes del modulo
prestashop.module.api_module.scopes:
class: PrestaShop\Module\ApiModule\Install\ApiScopeInstaller
tags:
- { name: 'prestashop.api.scope_installer' }
# Los scopes se registran en la BD:
# - my_module_read: Leer datos del modulo
# - my_module_write: Crear/modificar datos
Provider — obtener datos para la API
php
<?php
namespace PrestaShop\Module\ApiModule\ApiPlatform\Provider;
use ApiPlatform\Metadata\Operation;
use ApiPlatform\State\ProviderInterface;
class MyResourceProvider implements ProviderInterface
{
public function __construct(
private readonly MyResourceRepository $repository
) {}
public function provide(
Operation $operation,
array $uriVariables = [],
array $context = []
): object|array|null {
if (isset($uriVariables['myResourceId'])) {
return $this->repository->find($uriVariables['myResourceId']);
}
return $this->repository->findAll();
}
}
#demowsextend — Extender WebService
Demuestra como anadir un recurso gestionado por ObjectModel al WebService legacy. Compatible desde PS 1.7.8.
Repositorio
github.com/PrestaShop/example-modules/tree/master/demowsextend
#ObjectModel como recurso REST
Hook addWebserviceResources — registrar recurso
php
<?php
// modules/demowsextend/demowsextend.php
public function hookAddWebserviceResources()
{
return [
'demo_ws_items' => [
'description' => 'Demo WS Items',
'class' => 'DemoWsItem', // ObjectModel
'forbidden_method' => [], // Permitir GET, POST, PUT, DELETE
],
];
}
// ObjectModel para el recurso
// modules/demowsextend/classes/DemoWsItem.php
class DemoWsItem extends ObjectModel
{
public $name;
public $description;
public $active;
public static $definition = [
'table' => 'demo_ws_item',
'primary' => 'id_demo_ws_item',
'fields' => [
'name' => ['type' => self::TYPE_STRING, 'required' => true, 'size' => 255,
'ws' => true],
'description' => ['type' => self::TYPE_HTML, 'ws' => true],
'active' => ['type' => self::TYPE_BOOL, 'ws' => true],
],
];
// El campo 'ws' => true hace el campo visible en la API
// Omitir 'ws' o poner 'ws' => false oculta el campo
// Campos virtuales para WebService:
protected $webserviceParameters = [
'objectNodeName' => 'demo_ws_item',
'objectsNodeName' => 'demo_ws_items',
'fields' => [
'formatted_name' => [
'getter' => 'getFormattedName',
'ws_modifier' => true, // Campo virtual de solo lectura
],
],
];
public function getFormattedName(): string
{
return strtoupper($this->name);
}
}
#API Platform vs WebService Legacy
| Aspecto | WebService (legacy) | API Platform (PS 9+) |
|---|---|---|
| Autenticacion | API Key + Basic Auth | OAuth2 + JWT |
| Formato | XML (+ JSON parcial) | JSON-LD, JSON, HAL |
| Documentacion | Manual | OpenAPI auto-generada |
| Routing | Hook addWebserviceResources | Atributos PHP 8 #[ApiResource] |
| Data layer | ObjectModel obligatorio | Doctrine, CQRS, custom providers |
| Versioning | No | Si, via URI o header |
| Estado en PS 9.x | Funcional pero legacy | Recomendado para nuevos desarrollos |
| Disponibilidad | PS 1.5+ | PS 9.0+ (API Platform v3) |
Recomendacion
Para nuevos modulos PS 9+, usa la API Platform. Para modulos retro-compatibles con PS 1.7/8.x, el WebService legacy sigue siendo la opcion segura.
Descargar en Markdown
Pensado para pegar en ChatGPT, Claude u otra IA. Incluye solo el contenido de esta pagina.