Ir al contenido principal

REST API: Información nutricional 🧪​

Cómo asignar la información nutricional a un producto y calcular su valor en una elaboración.

Rest API: Funcionamiento de la información nutricional

tspoonlab dispone de información nutricional asociada a ingredientes/productos y permite el cálculo de la información nutricional para los productos elaborados o finales.

Los parámetros que contemplamos son:

En el caso de ingredientes/productos dicha información debe ser siempre expresada para 100 g.

En el caso de las elaboraciones se puede expresar para 100 g, para el peso total de la elaboración o para una unidad de la elaboración.

Se puede bajo demanda calcular la información nutricional de una elaboración o si se prefiere asignarla directamente. Este último caso es el recomendado cuando en los procesos de elaboración se realizan acciones (freír, hornear) que alteran la información nutricional de los ingredientes.

La energia expresada en Kj se calcula automáticamente en función de las Kcal.

1 Kj = 4,184 Kcal

Las Kcal se pueden asignar en base a los valores proporcionados en la fichas técnicas de los proveedores o calcular en base a la formula:

Kcal = fat * 9 + carbohydrates * 4 + proteins * 4 + fiber * 2

Rest API : Login

Para poder hacer llamadas a nuestras API'S lo primero que necesitamos es identificarnos mediante una llamada de login.

Esa llamada nos retornará una token que después debemos asociar en cada llamada posterior.

Este shell script muestra como autenticarnos mediante curl:

[email protected]
password=XXXXXXX

url=https://www.tspoonlab.com/recipes/api
authenticate='username='$username'&password='$password

echo -n 'rememberme:' > rememberme.txt
curl -v --data $authenticate $url/login >> rememberme.txt

En las llamadas posteriores debemos añadir a nuestros headers el token recibido de la llamada de login:

curl -X PUT -v -H "$(cat rememberme.txt)" $url/integration/llamada

Rest API : Seleccionar un centro de coste/restaurante

Las peticiones que se describen en los apartados siguientes hacen referencia a un centro de coste, en la mayoría de los casos se correspondería con un restaurante.

Para recuperar la lista de centros de costes y sus identificadores consulta el artículo Rest API: Centros de coste.

El identificador de centro de coste se corresponde al campo idOrderCenter de la clase UserOrderCenter.

Una vez tenemos el identificador este deberá añadirse a los headers para que sea utilizado en llamadas posteriores:

echo -n 'order:351583444167656299610202XXXXXXXXXXXX' >> rememberme.txt

Por tanto en nuestros request headers debemos especificar tanto el token devuelto por el login como el identificador del centro de coste:

rememberme:aGVucnkudXBzYWxsLmRAZXXXXXXXXXXXXXXXXXX
order:351583444167656299610202XXXXXXXXXXXX

Rest API : Asignar información nutricional a un producto

Debemos disponer del identificador del producto idComponent y realizaremos la siguiente llamada:

PUT 
https://www.tspoonlab.com/recipes/api/ingredient/{idComponent}/nutritional
https://www.tspoonlab.com/recipes/api/recipe/{idComponent}/nutritional
https://www.tspoonlab.com/recipes/api/dish/{idComponent}/nutritional

Pasaremos en el request body:

public class NewComponentNutritional {

private Double energy;
private Double fat;
private Double saturated;
private Double proteins;
private Double carbohydrates;
private Double sugar;
private Double salt;
private Double fiber;
private Boolean nutritionalPercent;
private Boolean nutritionalUnitari;
private String idComponentUnitNutritional;
}

nutricinalPercent toma valor true si los valores son para 100 g. Siempre para ingredientes/productos base.

nutricinalUnitari toma valor true si se envían valores para la unidad de la elaboración. En este caso el campo idComponentUnitNutritional nos indicará el id de la unidad de la elaboración para la que se envia información.

Si ambos (nutricinalPercent, nutricinalUnitari) son nulos o toman el valor falso los valores enviados son para la totalidad de la elaboración.

Rest API : calcular la información nutricional

Debemos disponer del identificador idComponent del producto elaborado (receta o plato) y realizaremos la siguiente llamada:

GET
https://www.tspoonlab.com/recipes/api/recipe/{idComponent}/nutritional
https://www.tspoonlab.com/recipes/api/dish/{idComponent}/nutritional

En el calculo podemos indicar si queremos realizarlo para 100 g, para el total o para una unidad de cantidad:

En la llamada deberemos añadir estos dos parámetros:

....?percent=false&unitari=false&idComponentUnit=null

percent a false y unitari a false calcula para el total.

Si queremos calcular para 100 g percent a true y unitari a false.

Si queremos calcular para la unidad unitari a true.

En este caso en idComponentUnit especificaremos el id de la unidad dentro de la elaboración para el que queramos realizar el cálculo.

Nos retornará el valor calculado:

class NutritionalInfo {

Double energy;

Double carbohydrates;
Double sugar;

Double fat;
Double saturated;

Double proteins;
Double salt;
Double fiber;

boolean nutritionalPercent;
boolean nutritionalUnitari;
String idComponentUnitNutritional;

List<EntityBaseQuantity> listIncomplete;
List<EntityBaseQuantity> listNoInfo;

List<EntityBaseQuantity> listNoInfoCarbohydrates;
List<EntityBaseQuantity> listNoInfoSugar;
List<EntityBaseQuantity> listNoInfoFat;
List<EntityBaseQuantity> listNoInfoSaturated;
List<EntityBaseQuantity> listNoInfoProteins;
List<EntityBaseQuantity> listNoInfoSalt;
List<EntityBaseQuantity> listNoInfoFiber;
List<EntityBaseQuantity> listNoInfoEnergy;
}

class EntityBaseQuantity {

String id;
String descr;
Short type;
Long color;
}


energy se corresponde a las kcal. Se envían también todos los valores en caso de que se hayan podido calcular o null en caso contrario.

Puede ocurrir que no se pueda calcular porque la aplicación no puede convertir la cantidad usada de un producto/ingrediente en la elaboración a kg. Estos casos quedaran reflejados en listIncomplete.

También puede ocurrir que al ingrediente que forma parte de la elaboración no se le especificó alguno de los parámetros de información nutricional. Si una elaboración tiene tres productos y para uno de ellos no se le especificó el parámetro fat, se retornará nulo para fat y se indicará que no se puede realizar el cálculo ya que uno de los ingredientes no tiene información. Se reflejará en listNoInfoFat o el correspondiente para el resto de valores.

listNotInfo tiene aquellos productos que no tienen nada de información nutricional.

nutricinalPercent toma valor true si ha calculado es para 100gr.

nutricinalUnitari toma valor true si ha calculado es para la unidad de la elaboración. En este caso el campo idComponentUnitNutritional nos indicará el id de la unidad de la receta para la que se ha realizado el cálculo.

En caso contrario se calcula para la totalidad de la elaboración.

¿Te ha resultado útil este artículo?

Si necesitas más ayuda, contacta con soporte haciendo clic en el Chat de Soporte Integrado en la esquina inferior derecha de tu pantalla.


¿Ha quedado contestada tu pregunta?