VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API legada/Referência completa/Categorias (REST)

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.

Conceitos principais
  • Os objetos aninhados permitem representar dados de forma hierárquica.
  • As relações entre pai e filho são mantidas pelo aninhamento dos objetos.
  • Entender os objetos aninhados é essencial para trabalhar com dados complexos, como produtos, categorias e pedidos.

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.

json
{
  "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.

json
{
  "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.

json
{
  "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.

js
// 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.

json
{
  "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"
        }
      }
    }
  }
}
Dica

Ao atualizar objetos aninhados, muitas vezes você pode atualizar só uma parte da estrutura, sem incluir o objeto inteiro. Por exemplo, para atualizar apenas o preço de um produto, basta incluir os campos product_id e price.

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.
js
// 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.

js
// 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.

js
// 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étodoCaminhoRetorna
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=YUma categoria com todas as subcategorias como objetos aninhados.
GET/api/orders/{order_id}Um pedido com dados aninhados de produtos, cliente e entrega.
Atenção

Ao trabalhar com objetos muito aninhados, fique atento ao possível impacto de desempenho. Considere usar filtro de campos (se a API suportar) para obter apenas os dados aninhados necessários em objetos grandes.

Documentação relacionada

Para informações mais detalhadas sobre tipos de objeto específicos e suas estruturas aninhadas, consulte:

  • API de produtos
  • API de categorias
  • API de pedidos
  • Características do produto
Anterior
Endpoints de categorias
Próxima
Paginação de categorias
Nesta página
  • Tipos de objetos aninhados
  • Produtos
  • Categorias
  • Pedidos
  • Trabalhando com objetos aninhados nas requisições
  • Acessando dados aninhados
  • Criando e atualizando objetos aninhados
  • Boas práticas
  • Validação de dados
  • Tratando dados ausentes
  • Trabalhando com arrays de objetos aninhados
  • Endpoints comuns com objetos aninhados
  • Documentação relacionada