Objetos aninhados
Como a API devolve e aceita objetos dentro de objetos, com exemplos de produtos, categorias e pedidos.
A API da Venddor devolve e aceita com frequência estruturas de dados complexas com objetos aninhados. Esta página explica como trabalhar bem com objetos aninhados na API.
Tipos de objetos aninhados
Vários tipos de objeto da API da Venddor contêm estruturas aninhadas.
Produtos
Os objetos de produto costumam conter objetos aninhados para opções e variantes do produto, características do produto, imagens e anexos, e informações de preço com detalhes de impostos.
{
"product_id": "42",
"product": "Premium T-shirt",
"price": "29.99",
"category_ids": ["12", "15"],
"options": {
"4": {
"option_id": "4",
"option_name": "Size",
"option_type": "S",
"variants": {
"12": {
"variant_id": "12",
"variant_name": "Small"
},
"13": {
"variant_id": "13",
"variant_name": "Medium"
},
"14": {
"variant_id": "14",
"variant_name": "Large"
}
}
}
},
"main_pair": {
"pair_id": "56",
"image_id": "78",
"detailed": {
"image_path": "http://example.com/images/detailed/tshirt.jpg",
"alt": "Premium T-shirt"
}
}
}Categorias
Os objetos de categoria podem incluir objetos aninhados para as relações entre pai e filho (subcategorias), características da categoria e configurações específicas da categoria.
{
"category_id": "15",
"category": "Men's Clothing",
"parent_id": "5",
"subcategories": [
{
"category_id": "18",
"category": "T-shirts",
"parent_id": "15"
},
{
"category_id": "19",
"category": "Pants",
"parent_id": "15"
}
],
"image_pair": {
"pair_id": "24",
"detailed": {
"image_path": "http://example.com/images/categories/mens.jpg"
}
}
}Pedidos
Os objetos de pedido normalmente contêm objetos aninhados para dados do cliente, endereços de entrega e de cobrança, produtos do pedido e detalhes do pagamento.
{
"order_id": "1001",
"status": "P",
"user_id": "42",
"products": [
{
"item_id": "101",
"product_id": "42",
"product": "Premium T-shirt",
"price": "29.99",
"amount": "2",
"product_options": {
"4": "13"
}
}
],
"shipping_address": {
"address_id": "15",
"address": "123 Main St",
"city": "Anytown",
"state": "CA",
"country": "US",
"zipcode": "12345"
},
"payment_info": {
"payment_id": "28",
"payment_method": "credit_card",
"status": "paid"
}
}Trabalhando com objetos aninhados nas requisições
Acessando dados aninhados
Ao trabalhar com respostas que contêm objetos aninhados, você precisa percorrer a hierarquia do objeto para chegar aos dados específicos.
// JavaScript example
const productName = response.product;
const size = response.options["4"].variants["13"].variant_name;
const imageUrl = response.main_pair.detailed.image_path;Criando e atualizando objetos aninhados
Ao criar ou atualizar objetos com estruturas aninhadas, você precisa incluir a hierarquia completa do objeto.
{
"product": "New T-shirt",
"price": "19.99",
"options": {
"4": {
"option_name": "Size",
"option_type": "S",
"variants": {
"0": {
"variant_name": "Small"
},
"1": {
"variant_name": "Medium"
},
"2": {
"variant_name": "Large"
}
}
}
}
}Boas práticas
Validação de dados
Ao trabalhar com objetos aninhados complexos, implemente uma validação completa:
- Verifique se os campos obrigatórios existem em todos os níveis do aninhamento.
- Confira se as referências a objetos (como IDs) são válidas.
- Valide os tipos de dado e os formatos em toda a hierarquia do objeto.
// JavaScript validation example
function validateProduct(product) {
// Validate top-level required fields
if (!product.product || !product.price) {
return false;
}
// Validate nested options if they exist
if (product.options) {
for (const optionId in product.options) {
const option = product.options[optionId];
if (!option.option_name || !option.option_type) {
return false;
}
// Validate option variants if they exist
if (option.variants) {
for (const variantId in option.variants) {
const variant = option.variants[variantId];
if (!variant.variant_name) {
return false;
}
}
}
}
}
return true;
}Tratando dados ausentes
Ao acessar objetos aninhados, programe de forma defensiva para lidar com dados que possam estar ausentes.
// JavaScript example with defensive programming
function getProductImage(product) {
// Handle missing image data safely
if (product &&
product.main_pair &&
product.main_pair.detailed &&
product.main_pair.detailed.image_path) {
return product.main_pair.detailed.image_path;
}
// Return default image if any part of the path is missing
return 'http://example.com/images/default.jpg';
}Trabalhando com arrays de objetos aninhados
Muitas respostas da API incluem arrays de objetos aninhados. Use técnicas adequadas para processar essas coleções.
// JavaScript example with array processing
function getTotalOrderAmount(order) {
if (!order.products || !Array.isArray(order.products)) {
return 0;
}
return order.products.reduce((total, product) => {
const price = parseFloat(product.price) || 0;
const quantity = parseInt(product.amount) || 0;
return total + (price * quantity);
}, 0);
}Endpoints comuns com objetos aninhados
| Método | Caminho | Retorna |
|---|---|---|
| GET | /api/products/{product_id} | Um produto com todos os dados aninhados, incluindo opções, variantes, características e imagens. |
| GET | /api/categories/{category_id}?get_subcategories=Y | Uma categoria com todas as subcategorias como objetos aninhados. |
| GET | /api/orders/{order_id} | Um pedido com dados aninhados de produtos, cliente e entrega. |
Documentação relacionada
Para informações mais detalhadas sobre tipos de objeto específicos e suas estruturas aninhadas, consulte: