Ir para o conteúdo

Transforme as suas conexões em um bônus de fim de ano com o nosso novo Programa de Indicação de Clientes! Saiba mais

Esta documentação é para a versão 4 e posterior do App Builder, o novo nome do Vinyl. Acesse a documentação do Vinyl aqui.

Recomendações da API REST no Jitterbit App Builder

Visão geral

Este documento fornece orientação para desenvolvedores que buscam implementar uma API REST compatível com o App Builder.

Para os propósitos deste documento, assumiremos que o desenvolvedor está focado em criar um serviço CRUD REST. Muitos dos princípios usados em uma API CRUD serão aplicáveis a outras APIs. No entanto, uma API CRUD provavelmente terá os requisitos mais abrangentes que interagirão com o App Builder (paginação, pesquisa, filtragem etc.).

Princípios de design RESTful

Na medida do possível, a API REST do App Builder segue estes princípios RESTful:

  • Os serviços são independentes de estado.
  • Os Endpoints são modelados como recursos.
  • Operações GET são seguras. Uma operação "segura" é aquela que não tem efeitos colaterais. Por exemplo, recuperar uma lista de clientes não altera a lista de clientes.
  • Operações DELETE não são seguras, mas são idempotentes. No entanto, enquanto a primeira solicitação (bem-sucedida) para excluir um item retornará um código de status 200, a segunda solicitação retornará um 404.
  • Operações POST não são seguras nem idempotentes. Por isso, operações POST podem conter dados parciais.
  • Os códigos de status HTTP indicam se ocorreu um erro.
  • Tipos de mídia são usados para executar negociação de conteúdo. No momento, no entanto, o App Builder suporta apenas JSON (application/json) e UTF-8.

O App Builder não adere a todos os princípios RESTful:

  • Os corpos de solicitação e resposta de recurso são encapsulados em um envelope. Isso permite que o App Builder inclua informações adicionais, como mensagens de eventos e resultados de validação.
  • As respostas de recursos não são hipermídia: elas não incluem links para outros recursos.

Envoltório

Os corpos de solicitação e resposta da API REST do App Builder são encapsulados em um envelope. Os envelopes permitem que dados sejam enviados de e para um endpoint da API fora do payload do endpoint.

Envelope do corpo da solicitação

O corpo da solicitação da API REST do App Builder contém estas propriedades de envelope:

Nome da propriedade Descrição
item A payload do endpoint.

Exemplo JSON

{
  "item": {}
}

Envelope do corpo da resposta

O corpo de resposta da API REST do App Builder contém estas propriedades de envelope:

Nome da propriedade Descrição
message A mensagem de sucesso ou falha do evento.
status Este é o código de status HTTP (duplicado).
validations Uma matriz de erros/avisos de validação para o endpoint chamado.
item ou itens A payload do endpoint - um único item ou uma coleção de itens.

Exemplo JSON

{
  "message": "",
  "status": 200,
  "validations": [],
  "items": []
}

Validações

Quando erros são encontrados, um objeto de validação é adicionado ao array de validações no envelope de resposta. O objeto de validação tem as seguintes propriedades:

Nome da Propriedade Descrição
message A mensagem de validação.
severity A gravidade da validação:
  • error
  • warning
  • information
field O campo referenciado pela validação.

Exemplo JSON

{
  "message": "",
  "status": 400,
  "validations": [
    {
      "message": "CustomerId is mandatory.",
      "severity": "error",
      "field": "customerId"
    },
    {
      "message": "CompanyName is mandatory.",
      "severity": "error",
      "field": "companyName"
    }
  ],
}

Operações principais

Estas são as operações básicas que seu serviço REST deve suportar. Alguns serviços, é claro, escolherão não implementar certos métodos (por exemplo, um serviço somente leitura implementaria apenas os métodos Get Single/Get Many).

Fique solteiro

A operação Get Single retorna um único registro. O identificador do registro é especificado na URL.

Método HTTP

PEGAR

Exemplo de URL

https://example.com/rest/v1/sales/customers/b603b276-a9bf-4328-88ff-8994176c38d1

Exemplo JSON

{
  "item": {
    "customerId": "b603b276-a9bf-4328-88ff-8994176c38d1",
    "name": "John Henry",
    "address": "130 Plutonium Drive"
  }
}

Pegue muitos

A operação Get Many retorna muitos registros para uma coleção. Muitas vezes, essa operação é usada junto com a paginação, para permitir que uma coleção de registros seja examinada.

Se possível, uma contagem dos registros na coleção deve ser retornada. Isso permite que o App Builder exiba a contagem de registros na UI, bem como informe a UI quando o fim da coleção for atingido.

Método HTTP

PEGAR

Exemplo de URL

https://example.com/rest/v1/sales/customers

Exemplo JSON

{
  "count": 2,
  "items": [
    {
      "customerId": "b603b276-a9bf-4328-88ff-8994176c38d1",
      "name": "John Henry",
      "address": "130 Plutonium Drive"
    },
    {
      "customerId": "9775de33-08fc-4cd2-98ef-d91f3d5355b1",
      "name": "Sally Keith",
      "address": "4500 Neutrino Road"
    }
  ],
  // envelope properties
}

Criar

A operação Create criará um novo registro. O identificador para o registro existe dentro do corpo JSON.

Observe que todo o registro é ecoado de volta na resposta. Isso é útil em casos em que alguns campos são criados ou atualizados pelo servidor (como um carimbo de data/hora de criação de registro).

Método HTTP

PUBLICAR

Exemplo de URL

https://example.com/rest/v1/sales/customers

Exemplo de corpo de solicitação JSON

{
  "item": {
    "customerId": "b603b276-a9bf-4328-88ff-8994176c38d1",
    "name": "John Henry",
    "address": "130 Plutonium Drive"
  }
}

Exemplo de corpo de resposta JSON

{
  "item": {
    "customerId": "b603b276-a9bf-4328-88ff-8994176c38d1",
    "name": "John Henry",
    "address": "130 Plutonium Drive"
  }
  // envelope properties
}

Atualizar

A operação Update atualizará um registro existente. O identificador para o registro é especificado na URL.

Observe que todo o registro é ecoado de volta na resposta. Isso é útil em casos em que alguns campos são criados ou atualizados pelo servidor (como um carimbo de data/hora de atualização de registro).

Método HTTP

  • PUT - Usado para uma atualização completa. Todos os parâmetros do registro precisam ser especificados.
  • POST - Usado para uma atualização parcial. Apenas os parâmetros obrigatórios do registro precisam ser especificados.

Exemplo de URL

https://example.com/rest/v1/sales/customers/b603b276-a9bf-4328-88ff-8994176c38d1

Exemplo de corpo de solicitação JSON

{
  "item": {
    "customerId": "b603b276-a9bf-4328-88ff-8994176c38d1",
    "name": "John Henry",
    "address": "130 Plutonium Drive"
  }
}

Exemplo de corpo de resposta JSON

{
  "item": {
    "customerId": "b603b276-a9bf-4328-88ff-8994176c38d1",
    "name": "John Henry",
    "address": "130 Plutonium Drive"
  }
  // envelope properties
}

Excluir

A operação delete excluirá um registro. O identificador do registro é especificado na URL. Nenhum corpo de solicitação precisa ser enviado para um DELETE.

Método HTTP

EXCLUIR

Exemplo de URL

https://example.com/rest/v1/sales/customers/b603b276-a9bf-4328-88ff-8994176c38d1

Exemplo de corpo de resposta JSON

{
  "item": {
    "customerId": "b603b276-a9bf-4328-88ff-8994176c38d1",
    "name": "John Henry",
    "address": "130 Plutonium Drive"
  }
}

Parâmetros de consulta

Pegue muitos

No nível de coleção, seu endpoint REST deve oferecer suporte aos seguintes recursos.

Paginação

Para coleções que contêm muitos registros, geralmente é necessário dar suporte à paginação. Para dar suporte à paginação, o App Builder define os seguintes parâmetros:

Parâmetro de consulta Descrição Exemplo
$limit O número máximo de registros a serem recuperados em uma solicitação. $limit=10
$offset De qual offset de registro a busca deve começar. Offsets são baseados em zero, então especificar 0 buscará o primeiro registro na coleção. $offset=10
$count Um booleano que indica se uma contagem de coleção deve ser retornada. No App Builder, esse parâmetro é considerado falso por padrão. $count=true

Classificação

O App Builder pode oferecer suporte à classificação simples de campos.

Parâmetro de consulta Descrição Exemplo
$sort Uma lista delimitada por vírgulas de nomes de campos para classificar. Prefixe o nome do campo com um traço (-) para classificar o campo em ordem decrescente. No exemplo fornecido, classifique a coleção por país, decrescente, e companyName, crescente. $sort=-country,companyName

Filtragem

O App Builder fornece suporte para uma string de filtro de consultar. A string de filtro de consultar oferece suporte a um subconjunto da especificação de filtro de string de consultar do OData 4.0. Para comparações de strings, curingas podem ser especificados usando o % personagem.

Parâmetro de consulta Descrição Exemplo
$filter Uma string de consultar no estilo OData 4.0 que filtra dados $filter=country eq 'united%'
Operadores
Comparação
Operador Descrição Exemplo
eq Igual ao valor. categoryId eq 42
neq Não é igual ao valor. categoryId neq 42
gt Maior que o valor. price gt 100
lt Menor que o valor. price lt 100
ge Maior ou igual ao valor. price ge 100
le Menor ou igual ao valor. price le 100
in Corresponde a qualquer valor na lista. categoryId in (1, 2, 3)
Lógico
Operador Descrição Exemplo
e E lógico price gt 100 and categoryId in (1,2,3)
Limitações
  • Sem operadores aritméticos
  • Nenhum operador lógico ou/não
  • Nenhum operador de agrupamento
  • Nenhuma função de consultar
  • Nenhum aliases de parâmetro

O App Builder fornece um mecanismo para pesquisar registros em uma coleção. Essa pesquisa opera em todos os campos pesquisáveis do registro.

Por padrão, o App Builder adiciona curingas ao início e ao fim da sequência de pesquisa.

Parâmetro de consulta Descrição Exemplo
$q Uma string de pesquisa para aplicar a todas as colunas pesquisáveis de um registro. $q=hello

Convenções de tipo

Tipos JSON

Como regra geral, os desenvolvedores devem preferir usar os tipos JSON nativos integrados. O App Builder mapeia automaticamente os tipos JSON nativos, então o uso direto de numéricos, booleanos, strings e nulos é encorajado.

Datas

O App Builder codifica datas usando o formato ISO 8601. Todas as datas são serializadas em UTC.

  • https://en.wikipedia.org/wiki/ISO_8601

Controle de versão

Para lidar com futuras incompatibilidades entre versões da API REST, o App Builder inclui um número de versão diretamente na URL REST.

Exemplo de URL

https://example.com/rest/v1/...

Operações opcionais

Outras operações que podem ser úteis para incluir em uma API REST CRUD.

Novo

A nova operação é usada para retornar padrões de registro. Isso é usado antes de criar um registro para casos em que alguns dados podem ser pré-preenchidos pelo servidor REST.

Método HTTP

  • OBTER
  • PUBLICAR.

Exemplo de URL

https://example.com/rest/v1/sales/customers(new)

Exemplo de corpo de resposta JSON

{
  "item": {
    "customerId": null,
    "daysActive": 0
  }
  // envelope properties
}

JSON - Conversão de tabelas relacionais

O App Builder fornece um mecanismo para converter entre a representação de tabela relacional interna de dados e JSON esperado pelos endpoints REST.

Matrizes para tabelas

Cada matriz em uma estrutura JSON é considerada uma tabela relacional separada no App Builder.

Dessa forma, a seguinte conversão seria aplicada a um endpoint chamado "customers(get)":

Clientes(obter) JSON

{
  "count": 2,
  "message": "Sample message",
  "status": 200,
  "items": [
    {
      "customerId": "b603b276-a9bf-4328-88ff-8994176c38d1",
      "name": "John Henry",
      "address": "130 Plutonium Drive"
    },
    {
      "customerId": "9775de33-08fc-4cd2-98ef-d91f3d5355b1",
      "name": "Sally Keith",
      "address": "4500 Neutrino Road"
    }
  ],
  // envelope properties
}

Estrutura da tabela resultante

"clientes(obter)"

Contagem Mensagem Status
2 Mensagem de exemplo 200

"clientes(obter)/itens"

customerid nome endereço
9775de33-08fc-4cd2-98ef-d91f3d5355b1 Sally Keith Estrada Neutrino 4500
b603b276-a9bf-4328-88ff-8994176c38d1 John Henry 130 Plutônio Drive

Escrevendo dados

Atualmente, o App Builder só oferece suporte à gravação em uma única tabela durante um evento. Como cada matriz JSON é considerada uma tabela separada, a gravação de um objeto inteiro que compreende várias matrizes em um único evento do App Builder pode não ser suportada.

Como resultado, procure minimizar o uso de matrizes JSON sempre que possível ou ofereça suporte à gravação de matrizes em um objeto em um endpoint da API REST separado.

Por exemplo, um objeto "customer" pode conter vários endereços. Ter um endpoint para escrever o objeto customer e outro endpoint para escrever os endereços permite que o App Builder se integre mais facilmente com sua REST API.