Para proporcionar maior flexibilidade na obtenção de dados, a API oferece uma funcionalidade de “campos solicitados”, que permite selecionar campos específicos de retorno. Esta característica é especialmente útil ao trabalhar com campos expandidos, permitindo solicitar apenas os subcampos relevantes.

Pontos importantes

  • Na ausência do parâmetro fields, a saída padrão é fornecida.
  • Não há limite de profundidade dos campos solicitados.

Como funciona?

Selecionando campos

Adicione o parâmetro fields à sua solicitação para especificar os campos desejados no retorno. Se estiver trabalhando com campos expandidos usando o parâmetro expand, também é possível aplicar a resposta seletiva.

Por exemplo, em uma requisição para buscar informações de um Loan, onde a resposta padrão seria:

curl --request GET \
     --url https://api.dev.base39.io/v1/loans/loan_63ff94f928a4fb05d70b7a17 \
     --header 'accept: application/json' \
     --header 'authorization: Bearer ${api-key}'
{
  "id": "loan_63ff94f928a4fb05d70b7a17",
  "customer":  "cust_63ff98c128a4fb05d70b7a22",
  "employment": "empl_63ff98cf28a4fb05d70b7a25",
  "company": "comp_63ff55cf28a4fb05d70b7a55",
  "status": "open",
  "offer": {
    "disbursementAmount": 1000,
    "fund": "fund_63ff55cf28a4fb05d70b7aa1",
    "rebates": [
      {
        "feeType": "tac",
        "amountType": "absolute",
        "amount": 200
      },
      {
        "feeType": "registration",
        "amountType": "absolute",
        "amount": 150
      },
      {
        "feeType": "spread",
        "amountType": "absolute",
        "amount": 100
      },
    ]
    ...
  }
  ...
}

Por algum motivo, pode ser que o usuário queira somente utilizar os campos id, customer e status. Nesse caso, ao adicionar o queryParameters fields=id,customer,status, teremos:

curl --request GET \
     --url 'https://api.dev.base39.io/v1/loans/loan_63ff94f928a4fb05d70b7a17?fields=id,customer,status' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer ${api-key}'
{
  "id": "loan_63ff94f928a4fb05d70b7a17",
  "customer":  "cust_63ff98c128a4fb05d70b7a22"
  "status": "open",
}

Campos aninhados

Você pode solicitar subcampos de campos expandidos. Utilize o ponto . para navegar entre subdocumentos.

Por exemplo, se quisermos somente os campos id, offer.disbursementAmount e offer.fund, adicionamos ao queryParameters a propriedade fields=id,offer.disbursementAmount,offer.fund. Note que foi utilizado o . para navegar entre subdocumentos.

curl --request GET \
     --url 'https://api.dev.base39.io/v1/loans/loan_63ff94f928a4fb05d70b7a17?fields=id,offer.disbursementAmount,offer.fund' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer ${api-key}'
{
  "id": "loan_63ff94f928a4fb05d70b7a17",
  "offer": {
    "disbursementAmount": 1000,
    "fund": "fund_63ff55cf28a4fb05d70b7aa1"
  }
}

Campos em lista

É possível selecionar uma propriedade comum entre os subdocumentos de uma lista. Por exemplo, para selecionar somente os campos id do loan, e os campos amount e feeType contidos em offer.rebates, basta adicionar ao queryParameters a propriedade fields=id,offer.rebates.feeType,offer.rebates.amount.

curl --request GET \
     --url 'https://api.dev.base39.io/v1/loans/loan_63ff94f928a4fb05d70b7a17?fields=id,offer.rebates.feeType,offer.rebates.amount' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer ${api-key}'
{
  "id": "loan_63ff94f928a4fb05d70b7a17",
  "offer": {
    "rebates": [
      {
        "feeType": "tac",
        "amount": 200
      },
      {
        "feeType": "registration",
        "amount": 150
      },
      {
        "feeType": "spread",
        "amount": 100
      },
    ]
  }
}

Note que, como rebates é uma lista de rebate, então o recurso (campos solicitados) faz uma busca do campo em todos os subdocumentos dessa lista.

Campos expandidos

A funcionalidade “campos solicitados” também possibilita a seleção de campos específicos após a realização de uma expansão de dados.

Por exemplo, suponhamos que haja uma solicitação que expanda o atributo customer dentro de um Loan:

curl --request GET \
     --url 'https://api.dev.base39.io/v1/loans/loan_63ff94f928a4fb05d70b7a17?expand=customer' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer ${api-key}'
{
  "id": "loan_63ff94f928a4fb05d70b7a17",
  "customer":  {
    "id": "cust_63ff98c128a4fb05d70b7a22",
    "name": "João",
    "username": "joao",
    ...
  }
  "employment": "empl_63ff98cf28a4fb05d70b7a25",
  "company": "comp_63ff55cf28a4fb05d70b7a55",
  "status": "open",
  "offer": {
    "disbursementAmount": 1000,
    "fund": "fund_63ff55cf28a4fb05d70b7aa1",
    "rebates": [
      {
        "feeType": "tac",
        "amountType": "absolute",
        "amount": 200
      },
      {
        "feeType": "registration",
        "amountType": "absolute",
        "amount": 150
      },
      {
        "feeType": "spread",
        "amountType": "absolute",
        "amount": 100
      },
    ]
    ...
  }
  ...
}

Esta é a resposta padrão para um campo expandido. No entanto, caso deseje obter somente os campos id e name do customer, você pode incluir ao queryParameters a instrução fields=id,customer.id,customer.nome.

curl --request GET \
     --url 'https://api.dev.base39.io/v1/loans/loan_63ff94f928a4fb05d70b7a17?expand=customer,employment&fields=id,customer.id,customer.nome' \
     --header 'accept: application/json' \
     --header 'authorization: Bearer ${api-key}'
{
  "id": "loan_63ff94f928a4fb05d70b7a17",
  "customer": {
    "id": "cust_63ff98c128a4fb05d70b7a22",
    "name": "João",
  }
}