Los feeds son operaciones pendientes de la base de datos.
Cuando se llama a un endpoint que requiere una operación de inserción o actualización en la base de datos subyacente, esta solicitud se pone en cola para ejecutarse de forma asincrónica. El trabajo por lotes resultante se denomina Feed en el contexto de Falabella Seller Center.
Este feed se asigna identificado por un UUID, que es un identificador calculado que se supone que es único. Este identificador se devuelve tras el envío satisfactorio de la solicitud original.
Creación de feeds
Por ejemplo, si publicamos esta solicitud ...
<?xml version="1.0" encoding="UTF-8" ?>
<Request>
<Product>
<SellerSku>4105382173aaee4</SellerSku>
<ParentSku></ParentSku>
<Status>active</Status>
<Name>Dried Water</Name>
<Variation>Family Pack</Variation>
<PrimaryCategory>4</PrimaryCategory>
<Categories>2,3,5</Categories>
<Description>You need this!</Description>
<Brand>Snake Oil</Brand>
<Price>1.00</Price>
<SalePrice>0.9</SalePrice>
<TaxClass>default</TaxClass>
<ShipmentType>dropshipping</ShipmentType>
<ProductId>xyzabc</ProductId>
<Condition>new</Condition>
<ProductData/>
<Quantity>1000000</Quantity>
</Product>
</Request>
... a esta URL ...
https://sellercenter-api.falabella.com/?Action=ProductCreate&Timestamp=2015-07-01T11%3A11%3A11%2B00%3A00&UserID=maintenance%40sellercenter.net&Version=1.0&Signature=3c32c572ad23d0e308c5ac7708478bc57666622ac1a93d210bbc6dfdc499c8ca
... la API devuelve este resultado:
<?xml version="1.0" encoding="UTF-8"?>
<SuccessResponse>
<Head>
<RequestId>6a521aff-e74b-4fb6-b40f-d46b42f91652</RequestId>
<RequestAction>ProductCreate</RequestAction>
<ResponseType/>
<Timestamp>2015-07-01T11:11:11+0000</Timestamp>
</Head>
<Body/>
</SuccessResponse>
El identificador del feed es el UUID que se devuelve dentro de la etiqueta RequestId, por lo que en este ejemplo es 6a521aff-e74b-4fb6-b40f-d46b42f91652.
Estado del feed
Los vendedores pueden solicitar una lista de feeds y errores de los endpoints de Feed. Los feeds pueden tener uno de varios estados:
Código de estado | Descripción |
---|---|
Queued | El feed se agregó correctamente a la cola y está pendiente de procesamiento. |
Processing | Actualmente, el servidor está procesando el feed. |
Canceled | El vendedor canceló el feed. |
Finished | El feed ha terminado de procesarse. |
Error | El feed ha terminado con error(es). |
Por ejemplo, podemos usar FeedStatus para consultar el estado de nuestra operación, así ...
https://sellercenter-api.falabella.com/?Action=FeedStatus&FeedID=6a521aff-e74b-4fb6-b40f-d46b42f91652&Format=XML&Timestamp=2015-07-01T11%3A11%3A11%2B00%3A00&UserID=maintenance%40sellercenter.net&Version=1.0&Signature=9f541032e4a3745493b194e78d8af7d77298a701b4d14dcdbe985ce3d8b0f7fb
... y descubriría que la operación falló y por qué había fallado:
<?xml version="1.0" encoding="UTF-8"?>
<SuccessResponse>
<Head>
<RequestId/>
<RequestAction>FeedStatus</RequestAction>
<ResponseType>FeedDetail</ResponseType>
<Timestamp>2015-07-01T11:11:11+0000</Timestamp>
<RequestParameters>
<FeedID>6a521aff-e74b-4fb6-b40f-d46b42f91652</FeedID>
</RequestParameters>
</Head>
<Body>
<FeedDetail>
<Feed>6a521aff-e74b-4fb6-b40f-d46b42f91652</Feed>
<Status>Finished</Status>
<Action>ProductCreate</Action>
<CreationDate>2015-07-01 11:11:11</CreationDate>
<UpdatedDate>2015-07-01 11:11:11</UpdatedDate>
<Source>api</Source>
<TotalRecords>1</TotalRecords>
<ProcessedRecords>1</ProcessedRecords>
<FailedRecords>1</FailedRecords>
<FeedErrors>
<Error>
<Code>0</Code>
<Message>Field PrimaryCategory with value '4' has a problem: Primary category Id is invalid</Message>
</Error>
<Error>
<Code>1</Code>
<Message>Field Brand with value 'ASM' has a problem: This brand does not exist in our database. Please contact our support.</Message>
</Error>
<Error>
<Code>2</Code>
<Message>Field TaxClass with value 'default' has a problem: 'default' is an invalid Tax Class</Message>
</Error>
</FeedErrors>
</FeedDetail>
</Body>
</SuccessResponse>
Dos cosas más son notables en el contexto del estado del feed:
- Los feeds con cualquier estado que no sea "Queued" (en cola) se eliminarán automáticamente del sistema 30 días después de su creación.
- Sólo se pueden cancelar los feeds en cola.
Estrangulación (Throttling) de feeds
Cada feed que se crea puede contener uno o más productos.
Es más eficiente utilizar un feed que contenga muchas creaciones / actualizaciones de productos, en lugar de una creación de feed por creación / actualización de productos.
Falabella Seller Center limita la cantidad de feeds que se pueden crear en un período de tiempo determinado. En cualquier día se pueden crear 50 feeds. Una vez que se alcanza el límite diario, se le permite crear un feed más cada dos minutos. Eventualmente, cuando se usa el límite total, se pueden crear 770 feeds por día.
Las limitaciones del feed dependen del vendedor
Esta limitación se aplica a cada vendedor por separado.
Para visualizar este comportamiento, considere la metáfora del cubo con fugas. Hay un cubo con un agujero en el fondo, que gotea a un ritmo determinado. Una vez que el depósito está lleno, es imposible agregar más solicitudes y tenemos que esperar a que algunas de ellas se filtren.
En conclusión, la tasa normal de procesamiento (o "leaking") es de 30 por hora, pero el contenedor puede contener más solicitudes, siempre que no haya más de 50 de ellas a la vez en el sistema.
Además, cada vendedor sólo puede actualizar su inventario 5 veces al día. Entonces, cuando tiene 100.000 productos, puede actualizar 500.000 productos por día. Cualquier vendedor, independientemente del número de productos, siempre puede realizar 50.000 actualizaciones por día.