Endpoints para Producto
En el contexto de nuestra API, un producto representa una entidad fundamental que interactúa con el sistema. Este producto puede ser genérico o variante. Un producto genérico puede tener ciertos productos variantes asociados a él dependiendo de sus características.
Características Comunes del Producto
-
Identificador único: La entidad Producto consta de un identificador único que sirve para distinguirlo de las demás y referenciarla con facilidad. Además cuenta con un campo
idRemote, que hace referencia al id que puede estar almacenado en la base de datos del ERP del cliente. -
Datos de Producto: Normalmente, un producto variante tiene información asociada como la compañía, la referencia del producto genérico, observaciones, almacenes, temporada, características y los subconjuntos correspondientes a cada una, la tasa, las imágenes y otros detalles de producto. Si el producto es genérico, el campo referencia del producto será nulo y no tendrá ni características ni almacenes asociados.
-
Estado y Actividad: Puede haber estados que indican si el producto está activo, inactivo o suspendido temporalmente, dependiendo de las políticas de la plataforma. También, hay otro estado que indica si el producto es genérico o no.
-
Compañía: Es necesario tener una compañía asociada a cada producto.
-
Tasa: Debe haber una tasa asociada a cada producto haciendo referencia a la entidad ProductRate.
-
Característica: Es necesario tener al menos una característica y un valor de subconjunto asociado para poder crear un producto variante. Los productos genéricos no tienen características.
-
Almacén: Cada producto variante puede estar en uno o más almacenes. Con la información del almacén, se genera también el stock de estas variantes que se inicializa a cero.
-
Elemento: Cada producto puede estar asociado a uno o más elementos o imágenes.
Importancia en la API
Nuestra API proporciona endpoints específicos para gestionar y manipular productos genéricos y productos variantes dentro del sistema. Estos endpoints permiten operaciones como la creación de productos y tasas de productos, actualización, recuperación de productos variates o genéricos y eliminación de información de producto de manera estructurada y segura.
Endpoints
GET/Product/getProduct
Obtención de una Lista Paginada de Productos del Sistema
Descripción
Este endpoint recupera una lista paginada de productos del sistema. Permite a los clientes obtener datos de productos basados en parámetros de paginación como el número de página (page) y el número de ítems por página (pageSize). La respuesta incluye información detallada sobre cada producto, incluyendo su ID, información de la compañía asociada, referencia, sku, almacenes, si es genérico o no, producto asociado (en el caso de ser variante), detalles de características y los subconjuntos correspondientes a ellas, información de tasa e información de imágenes asociadas.
Parámetros
| Nombre | Descripción | Tipo | Valor Predeterminado |
|---|---|---|---|
page | Número de página | Integer | 1 |
pageSize | Número de ítems por página | Integer | 10 |
Respuestas
JSON
{
"data": [
{
"id": "string",
"idRemote": "string",
"company": {
"id": "string",
"idRemote": "string",
"companyNmae": "string",
"commerciaName": "string",
"tin": "string"
},
"productReference": "string",
"isGeneric": true,
"sku": "string",
"associateProduct": "string",
"observations": "string",
"warehouse": [
{
"id": "string",
"idRemote": "string",
"name": "string"
}
],
"blocked": true,
"characteristics": [
{
"characteristic": "string",
"value": "string"
}
],
"rate": [
{
"id": "string",
"rate": "string",
"price": 0,
"pvp": 0
}
],
"items": [
{
"id": "string",
"idRemote": "string",
"nameImage": "string"
}
],
"active": true
}
],
"pagination": {
"totalItems": 0,
"itemsPerPage": 0,
"currentPage": 0,
"totalPages": 0,
"nextPageUrl": "string"
}
}
XML
<?xml version="1.0" encoding="UTF-8"?>
<export>
<data>
<item>
<id>string</id>
<idRemote>string</idRemote>
<company>
<id>string</id>
<idRemote>string</idRemote>
<companyNmae>string</companyNmae>
<commerciaName>string</commerciaName>
<tin>string</tin>
</company>
<productReference>string</productReference>
<isGeneric>true</isGeneric>
<sku>string</sku>
<associateProduct>string</associateProduct>
<observations>string</observations>
<warehouse>
<id>string</id>
<idRemote>string</idRemote>
<name>string</name>
</warehouse>
<blocked>true</blocked>
<characteristics>
<characteristic>string</characteristic>
<value>string</value>
</characteristics>
<rate>
<id>string</id>
<rate>string</rate>
<price>0</price>
<pvp>0</pvp>
</rate>
<items>
<id>string</id>
<idRemote>string</idRemote>
<nameImage>string</nameImage>
</items>
<active>true</active>
</item>
</data>
<pagination>
<totalItems>0</totalItems>
<itemsPerPage>0</itemsPerPage>
<currentPage>0</currentPage>
<totalPages>0</totalPages>
<nextPageUrl>string</nextPageUrl>
</pagination>
</export>
GET/Product/getVariantProduct
Obtención de una Lista Paginada de Productos Variantes del Sistema
Descripción
Este endpoint recupera una lista paginada de productos variantes del sistema. Permite a los clientes obtener datos de productos variantes basados en parámetros de paginación como el número de página (page) y el número de ítems por página (pageSize). La respuesta incluye información detallada sobre cada producto, incluyendo su ID, información de la compañía asociada, referencia, sku, almacenes, si es genérico o no, producto asociado (en el caso de ser variante), detalles de características y los subconjuntos correspondientes a ellas, información de tasa e información de imágenes asociadas.
Parámetros
| Nombre | Descripción | Tipo | Valor Predeterminado |
|---|---|---|---|
page | Número de página | Integer | 1 |
pageSize | Número de ítems por página | Integer | 10 |
Respuestas
JSON
{
"data": [
{
"id": "string",
"idRemote": "string",
"company": {
"id": "string",
"idRemote": "string",
"companyNmae": "string",
"commerciaName": "string",
"tin": "string"
},
"productReference": "string",
"isGeneric": true,
"sku": "string",
"associateProduct": "string",
"observations": "string",
"warehouse": [
{
"id": "string",
"idRemote": "string",
"name": "string"
}
],
"blocked": true,
"characteristics": [
{
"characteristic": "string",
"value": "string"
}
],
"rate": [
{
"id": "string",
"rate": "string",
"price": 0,
"pvp": 0
}
],
"items": [
{
"id": "string",
"idRemote": "string",
"nameImage": "string"
}
],
"active": true
}
],
"pagination": {
"totalItems": 0,
"itemsPerPage": 0,
"currentPage": 0,
"totalPages": 0,
"nextPageUrl": "string"
}
}
XML
<?xml version="1.0" encoding="UTF-8"?>
<export>
<data>
<item>
<id>string</id>
<idRemote>string</idRemote>
<company>
<id>string</id>
<idRemote>string</idRemote>
<companyNmae>string</companyNmae>
<commerciaName>string</commerciaName>
<tin>string</tin>
</company>
<productReference>string</productReference>
<isGeneric>true</isGeneric>
<sku>string</sku>
<associateProduct>string</associateProduct>
<observations>string</observations>
<warehouse>
<id>string</id>
<idRemote>string</idRemote>
<name>string</name>
</warehouse>
<blocked>true</blocked>
<characteristics>
<characteristic>string</characteristic>
<value>string</value>
</characteristics>
<rate>
<id>string</id>
<rate>string</rate>
<price>0</price>
<pvp>0</pvp>
</rate>
<items>
<id>string</id>
<idRemote>string</idRemote>
<nameImage>string</nameImage>
</items>
<active>true</active>
</item>
</data>
<pagination>
<totalItems>0</totalItems>
<itemsPerPage>0</itemsPerPage>
<currentPage>0</currentPage>
<totalPages>0</totalPages>
<nextPageUrl>string</nextPageUrl>
</pagination>
</export>
GET/Product/updatedFrom
Obtención de Productos desde una fecha de modificación
Descripción
Este endpoint recupera una lista paginada de productos del sistema, desde una fecha de modificación utilizando el parámetro date. Permite a los clientes obtener datos de productos basados en parámetros de paginación como el número de página (page) y el número de ítems por página (pageSize). La respuesta incluye información detallada sobre cada producto, incluyendo su ID, información de la compañía asociada, referencia, sku, almacenes, si es genérico o no, producto asociado (en el caso de ser variante), detalles de características y los subconjuntos correspondientes a ellas, información de tasa e información de imágenes asociadas.
Parámetros
| Nombre | Descripción | Tipo | Valor Predeterminado |
|---|---|---|---|
updated | Fecha de actualización | String | 1999-01-01 01:00:00 |
page | Número de página | Integer | 1 |
pageSize | Número de ítems por página | Integer | 10 |
Respuestas
JSON
{
"data": [
{
"id": "string",
"idRemote": "string",
"company": {
"id": "string",
"idRemote": "string",
"companyNmae": "string",
"commerciaName": "string",
"tin": "string"
},
"productReference": "string",
"isGeneric": true,
"sku": "string",
"associateProduct": "string",
"observations": "string",
"warehouse": [
{
"id": "string",
"idRemote": "string",
"name": "string"
}
],
"blocked": true,
"characteristics": [
{
"characteristic": "string",
"value": "string"
}
],
"rate": [
{
"id": "string",
"rate": "string",
"price": 0,
"pvp": 0
}
],
"items": [
{
"id": "string",
"idRemote": "string",
"nameImage": "string"
}
],
"active": true
}
],
"pagination": {
"totalItems": 0,
"itemsPerPage": 0,
"currentPage": 0,
"totalPages": 0,
"nextPageUrl": "string"
}
}
XML
<?xml version="1.0" encoding="UTF-8"?>
<export>
<data>
<item>
<id>string</id>
<idRemote>string</idRemote>
<company>
<id>string</id>
<idRemote>string</idRemote>
<companyNmae>string</companyNmae>
<commerciaName>string</commerciaName>
<tin>string</tin>
</company>
<productReference>string</productReference>
<isGeneric>true</isGeneric>
<sku>string</sku>
<associateProduct>string</associateProduct>
<observations>string</observations>
<warehouse>
<id>string</id>
<idRemote>string</idRemote>
<name>string</name>
</warehouse>
<blocked>true</blocked>
<characteristics>
<characteristic>string</characteristic>
<value>string</value>
</characteristics>
<rate>
<id>string</id>
<rate>string</rate>
<price>0</price>
<pvp>0</pvp>
</rate>
<items>
<id>string</id>
<idRemote>string</idRemote>
<nameImage>string</nameImage>
</items>
<active>true</active>
</item>
</data>
<pagination>
<totalItems>0</totalItems>
<itemsPerPage>0</itemsPerPage>
<currentPage>0</currentPage>
<totalPages>0</totalPages>
<nextPageUrl>string</nextPageUrl>
</pagination>
</export>
GET/Product/getVariantProduct/byGenericId/{id}
Obtención de una Lista Paginada de Productos Variantes del Sistema dado un ID de un producto genérico
Descripción
Este endpoint recupera una lista paginada de productos variantes del sistema dado un id de un producto genérico. Permite a los clientes obtener datos de productos variantes basados en parámetros de paginación como el número de página (page) y el número de ítems por página (pageSize). La respuesta incluye información detallada sobre cada producto, incluyendo su ID, información de la compañía asociada, referencia, sku, almacenes, si es genérico o no, producto asociado (en el caso de ser variante), detalles de características y los subconjuntos correspondientes a ellas, información de tasa e información de imágenes asociadas.
Parámetros
| Nombre | Descripción | Tipo | Valor Predeterminado |
|---|---|---|---|
id | Identificador de Producto | String | required |
page | Número de página | Integer | 1 |
pageSize | Número de ítems por página | Integer | 10 |
Respuestas
JSON
{
"data": [
{
"id": "string",
"idRemote": "string",
"company": {
"id": "string",
"idRemote": "string",
"companyNmae": "string",
"commerciaName": "string",
"tin": "string"
},
"productReference": "string",
"isGeneric": true,
"sku": "string",
"associateProduct": "string",
"observations": "string",
"warehouse": [
{
"id": "string",
"idRemote": "string",
"name": "string"
}
],
"blocked": true,
"characteristics": [
{
"characteristic": "string",
"value": "string"
}
],
"rate": [
{
"id": "string",
"rate": "string",
"price": 0,
"pvp": 0
}
],
"items": [
{
"id": "string",
"idRemote": "string",
"nameImage": "string"
}
],
"active": true
}
],
"pagination": {
"totalItems": 0,
"itemsPerPage": 0,
"currentPage": 0,
"totalPages": 0,
"nextPageUrl": "string"
}
}
XML
<?xml version="1.0" encoding="UTF-8"?>
<export>
<data>
<item>
<id>string</id>
<idRemote>string</idRemote>
<company>
<id>string</id>
<idRemote>string</idRemote>
<companyNmae>string</companyNmae>
<commerciaName>string</commerciaName>
<tin>string</tin>
</company>
<productReference>string</productReference>
<isGeneric>true</isGeneric>
<sku>string</sku>
<associateProduct>string</associateProduct>
<observations>string</observations>
<warehouse>
<id>string</id>
<idRemote>string</idRemote>
<name>string</name>
</warehouse>
<blocked>true</blocked>
<characteristics>
<characteristic>string</characteristic>
<value>string</value>
</characteristics>
<rate>
<id>string</id>
<rate>string</rate>
<price>0</price>
<pvp>0</pvp>
</rate>
<items>
<id>string</id>
<idRemote>string</idRemote>
<nameImage>string</nameImage>
</items>
<active>true</active>
</item>
</data>
<pagination>
<totalItems>0</totalItems>
<itemsPerPage>0</itemsPerPage>
<currentPage>0</currentPage>
<totalPages>0</totalPages>
<nextPageUrl>string</nextPageUrl>
</pagination>
</export>
POST/Product/createGenericProduct
Registro de Productos Genéricos en la API: Uso del Método POST
Actualmente, nuestro método POST en la API está diseñado para manejar exclusivamente el formato JSON. Para registrar productos de manera efectiva, es crucial seguir un proceso que garantice la integridad de los datos y la funcionalidad adecuada del sistema.
Proceso de Registro:
-
Creación de Compañía: Antes de registrar un prodcuto, es necesario asegurarse de que exista una Compañía asociada. Esto es importante ya que los usuarios pueden tener varias compañías. 👉Registrar Compañía🌱
-
Creación de Elemento: Antes de asociar una imagen a un producto, es necesario asegurarse de que exista un elemento asociado. Este paso es opcional ya que el parámetro
itemIdno es requerido. Un producto genérico puede tener una imagen asociada o no tenerla. 👉Registrar Elemento🌱 -
Incluir idiomas para el producto El nuevo producto puede incluir especificaciones de idioma. El idioma influye en cómo se traducen los productos en el contexto del B2B. Para que la creación del porducto con idiomas sea exitosa, debe adjuntar un idioma ya existente en el sistema, y proveer el título y descripción en el idioma correspondiente. Por ejemplo, si desea incluir traducciones en español, debe seleccionar el id correspondiente con el idioma español y adjuntar el título y descripción del nuevo producto en español. Es posible agregar varias traducciones del nuevo producto en el momento de la ejecución de este endpoint. El parámetro
languageses opcional por lo que podemos crear un producto sin incluir idiomas.
En el parámetro
languageIdpuedes adjuntar elido elisodel Idioma que quieres relacionar con el nuevo producto, eligiendo el que más cómodo le parezca.
Parámetros obligatorios.
Puedes crear un producto sin incluir traducciones o imágenes. No obstante debes tener en cuenta los siguientes parámetros obligatorios:
| Nombre | Descripción | Tipo |
|---|---|---|
idRemote | Identificador del nuevo Producto Genérico | String |
companyId | Identificador de la Compañía relacionada con el nuevo Producto Genérico | String |
reference | Referencia del nuevo Producto Genérico | String |
observations | Observaciones. Deben incluirse en el cuerpo, pero pueden incluirse vacías | String |
active | Determina si el Producto est á activo o no | String |
El cuerpo de la solicitud debe seguir el siguiente esquema:
[
{
"idRemote": "string",
"companyId": "string",
"reference": "string",
"observations": "string",
"languages": [
{
"languageId": "string",
"productTitle": "string",
"productDescription": "string"
}
],
"itemId": "string",
"active": true
}
]
Es posible añadir varios productos a través de la misma solicitud separándolos con comas dentro del array en el cuerpo de la solicitud.
Respuestas
Con el fin de no saturar al servidor, este endpoint envía un mensaje a un consumidor encargado de procesar la petición. Para comprobar el estado de la solicitud enviada es necesario acceder a la url adjunta en la respuesta. Una respuesta correctamente enviada al consumidor debe parecerse a esta:
{
"code": 201,
"message": "Generic Product message created successfully and dispatched to the queue.",
"statusUrl": "http://host/api/database/v1/message/status/66bf382938941"
}
El campo statusUrl nos redirige a una respuesta más detallada sobre el estado de la petición. Una solicitud correctamente procesada por el consumidor tiene el siguiente aspecto:
{
"data": [
{
"status": "completed",
"errorMessage": null
}
],
"pagination": {
"totalItems": 1,
"itemsPerPage": 10,
"currentPage": 1,
"totalPages": 1,
"nextPageUrl": null
}
}
En caso de producirse cualquier error durante el procesado del mensaje, la respuesta tendrá un aspecto similar a este:
{
"code": 400,
"error": "Invalid generic product data format, a required parameter is missing"
}
POST/Product/createVariantProduct
Registro de Productos Variantes en la API: Uso del Método POST
Actualmente, nuestro método POST en la API está diseñado para manejar exclusivamente el formato JSON. Para registrar productos de manera efectiva, es crucial seguir un proceso que garantice la integridad de los datos y la funcionalidad adecuada del sistema.
Proceso de Registro:
-
Creación de Producto Genérico: Antes de registrar un prodcuto variante, es necesario asegurarse de que exista un Producto Genérico asociado. Esto es importante ya que una variante no puede existir si no hay un genérico. 👉Registrar Producto🌱
-
Creación de Característica: Antes de registrar un producto, es necesario asegurarse de que exista una característica asociada. Para que la creación del porducto sea exitosa, debe adjuntar una característica ya existente en el sistema, y proveer el valor de subconjunto correspondiente. 👉Registrar Característica🌱
-
Creación de Valor de Subconjunto de Característica: Antes de registrar un producto, es necesario asegurarse de que exista un valor de subconjunto de característica asociado. Para que la creación del porducto sea exitosa, debe adjuntar un valor de subconjunto de característica ya existente en el sistema, y proveer su característica correspondiente. 👉Registrar Valor de Subconjunto de Característica🌱
-
Incluir idiomas para el producto El nuevo producto puede incluir especificaciones de idioma. El idioma influye en cómo se traducen los productos en el contexto del B2B. Para que la creación del porducto con idiaomas sea exitosa, debe adjuntar un idioma ya existente en el sistema, y proveer el título y descripción en el idioma correspondiente. Por ejemplo, si desea incluir traducciones en español, debe seleccionar el id correspondiente con el idioma español y adjuntar el título y descripción del nuevo producto en español. Es posible agregar varias traducciones del nuevo producto en el momento de la ejecución de este endpoint. El parámetro
languageses opcional por lo que podemos crear un producto sin incluir idiomas. Si al producto variante no le asociamos ningún idioma, se asociarán por defecto los del producto genérico si tiene, sino no tendrá idiomas asociados. 👉Ver idiomas disponibles🌱 -
Creación de Almacén: Para poder registrar un producto necesitamos saber en que almacén se encuentra. Así, en el momento en el que se crea el producto variante, se creará también el stock correspondiente a este producto. En el Stock relacionamos el producto variante con el almacén en el que se encuentra y la cantidad comienza en cero ya que luego se pueden hacer las modificaciones necesarias en el stock de cada producto. Es posible agregar varios almacenes pasando un
idRemote. 👉Registrar Almacén🌱 -
Creación de Elemento: Antes de asociar una imagen a un producto, es necesario asegurarse de que exista un elemento asociado. Este paso es opcional ya que el parámetro
itemsno es requerido. Un producto genérico puede tener una imagen asociada o no tenerla. Es posible agregar varios elementos pasando unitemId. 👉Registrar Elemento🌱 -
Creación de Temporada: Puede adjuntar una referencia correcta a una Temporada a través del parámetro
seasonId, este parámetro es opcional. Puede encontrar información sobre como obtener las Temporadas existentes, o como registrar una nueva Temporada en el sistema a través de este enlace. 👉Crear una Temporada🌱 -
Creación de Tasa: Antes de asociar una tasa de producto al producto variante, es necesario asegurarse de que exista una tasa asociada. Este paso es opcional ya que el parámetro
rateno es requerido. Un producto genérico puede tener una tasa de producto asociada o no. Es posible agregar varias tasas de producto pasando los parámetrosidRemote,rateId,priceypvp. 👉Registrar Tasa🌱
Parámetros obligatorios.
Puedes crear un producto sin incluir traducciones o imágenes. No obstante debes tener en cuenta los siguientes parámetros obligatorios:
| Nombre | Descripción | Tipo |
|---|---|---|
idRemote | Identificador del nuevo Producto Variante | String |
productGenericId | Identificador del Producto Genérico relacionado con la nueva Variante | String |
reference | Referencia del nuevo Producto Variante | String |
warehouses | Almacenes en los cuales está disponible la nueva Variante | Array |
blocked | Determina si la nueva Variante está bloqueada o no | Boolean |
characteristics | Características asociadas con el nuevo Producto Variante | Array |
active | Determina si el Producto está activo o no | Boolean |
Parámetros obligatorios en los almacenes.
Dentro del atributo warehouses debe incluir una lista con los idRemote de los almacenes en los cuales estará disponible la nueva Variante. El programa lanzará una excepción si no encuentra el identificador del Almacén incluido en la solicitud.
Parámetros obligatorios en las características.
Es obligatorio asignar características a las nuevas variantes. Para asegurar un correcto funcionamiento debes asegurarte de que el Subset relacionado con el Valor que vas a añadir, tenga la misma Característica asociada que la que vas a añadir. Por ejemplo, si la Característica que deseas relacionar con el nuevo Producto es color , el valor que vayas a asignarle al nuevo Producto debe ser uno existente para esta característica.
Cuerpo de la solicitud:
Una petición para crear una variante con todos sus atributos debe el siguiente esquema:
[
{
"idRemote": "string",
"productGenericId": "string",
"reference": "string",
"observations": "string",
"sku": "string",
"seasonId": "string",
"warehouses": [
{
"idRemote": "string"
}
],
"blocked": true,
"characteristics": [
{
"characteristicId": "string",
"subsetValueId": "string"
}
],
"rates": [
{
"rateId": "string",
"price": "string",
"pvp": "string",
"pvpr": "string"
}
],
"languages": [
{
"languageId": "string",
"productTitle": "string",
"productDescription": "string"
}
],
"items": [
{
"itemId": "string"
}
],
"active": true
}
]
Es posible añadir varios productos a través de la misma solicitud separándolos con comas dentro del array en el cuerpo de la solicitud.
Respuestas
Con el fin de no saturar al servidor, este endpoint envía un mensaje a un consumidor encargado de procesar la petición. Para comprobar el estado de la solicitud enviada es necesario acceder a la url adjunta en la respuesta. Una respuesta correctamente enviada al consumidor debe parecerse a esta:
{
"code": 201,
"message": "Variant Product message created successfully and dispatched to the queue.",
"statusUrl": "http://host/api/database/v1/message/status/66bf382938941"
}
El campo statusUrl nos redirige a una respuesta más detallada sobre el estado de la petición. Una solicitud correctamente procesada por el consumidor tiene el siguiente aspecto:
{
"data": [
{
"status": "completed",
"errorMessage": null
}
],
"pagination": {
"totalItems": 1,
"itemsPerPage": 10,
"currentPage": 1,
"totalPages": 1,
"nextPageUrl": null
}
}
En caso de producirse cualquier error durante el procesado del mensaje, la respuesta tendrá un aspecto similar a este:
{
"code": 400,
"error": "Invalid variant product data format, a required parameter is missing"
}