Skip to content

Sync

O Processo de SYNC tem como principal objetivo sincronizar as informações dos sistemas acadêmicos com o HUB. No momento do primeiro sync, serão criados os usuários, bem como o ensalamento da instituição dentro do HUB. Esse processo pode ser refeito para novas inserções, alterações e exclusão de informações.

POST

  • Possui validação dos dados de forma síncrona
  • Eventos devem ser enviados em batch
  • A APIKEY deve ser solicitada através do e-mail
  • Eventos devem ser enviados no padrão JSON - caso precise, deve ser feita mais de uma chamada para esse endpoint
  • Exemplo da url:
    • https://apihub.educacional.com/sync/


  • objeto deve possuir o padrão:
1
2
3
header{
    "hub-identity": /*APIKEY*/
}
  • BODY
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
    "doo": "2018-11-05T15:25:16.584Z", //data que ocorreu o evento (com as horas) (date of occurrence)
    "ver": "1.0.0", //versão do protocolo
    "who": "sis.12458", //fonte dos dados
    "org_id": "b253081c016x11eab2d30672699b542a", //Chave que representa uma organização
    "dat":[ //array com os eventos em batch
        {/** event object */},
        {/** event object */},
        ...
    ]
}
  • eventos devem possuir o padrão:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
    "typ": "update", //identificador da ação do evento (insert, update e delete )
    "obj": {
        /*payload dos objetos */
        "user": [ // array de objetos de usuários
          {/** user object */},
          {/** user object */},
          {/** user object */},
          ...
        ],
        "section": [ // array de objetos de turmas
          {/** section object */},
          ...
        ],
        "studentparent": [ // array de objetos da relação aluno responsável
          {/** studentparent object */},
          ...
        ],
        "sectionstudent": [ // array de objetos da relação turma aluno
          {/** sectionstudent object */},
          ...
        ],
        "sectionteacher": [ // array de objetos da relação turma professor
          {/** sectionteacher object */},
          ...
        ]
    }
}

obs: no evento acima, existe 3 usuários (user), 1 turma (section), 1 relacionamento de responsável (studentparent) e 1 relacionamento de professor e aluno com uma turma (sectionstudent, sectionteacher) para atualizar

  • exemplo com mais eventos
    • 2 usuário para atualizar
    • 1 usuário e 2 relacionamentos para inserir
    • 1 usuário para deletar
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
{
    "doo": "2018-11-05T15:25:16.584Z", //data que ocorreu o evento (com as horas) (date of occurrence)
    "ver": "1.0.0", //versão do protocolo
    "who": "sis.12458", //fonte dos dados
    "org_id": "b253081c016x11eab2d30672699b542a", //Chave que representa uma organização
    "dat":[ //array com os eventos em batch
        {
            "typ": "update", //identificador da ação do evento (insert, update e delete )
            "obj": {
                "user": [ // array de objetos de usuários
                    {/** user object */},
                    {/** user object */}
                ]
            }
        },
        {
            "typ": "insert", //identificador da ação do evento (insert, update e delete )
            "obj": {
                "user": [
                    {/** user object */}
                ],
                "sectionstudent": [ 
                    {/** sectionstudent object */}
                ],
                "sectionteacher": [
                    {/** sectionteacher object */}
                ]
            }
        },
        {
            "typ": "delete", //identificador da ação do evento (insert, update e delete )
            "obj": {
                "user": [
                    {/** user object */}
                ]
            }
        }
    ]
}
  • O payload dos objetos está detalhado nas páginas abaixo

Response

  • Code: 200
    • Status: OK
    • Exemplo:
      1
      2
      3
      {
          "messageId": "df1656c6-bad8-4aa9-b405-e89e81892f09" 
      }
      
  • Code: 400
    • Status: Requisição Inválida
  • Code: 500
    • Status: Erro Interno

Consulta Dados

  • O processo de atualização é feito de forma asyncrona, dessa forma, o retorno com os detalhes sobre os dados sincronizados deve ser solicitado conforme os dados abaixo

GET

URL: apihub.educacional.com/sync/v1/log/[messageId]

1
2
3
header{
    "hub-identity": /*APIKEY*/
}
  • BODY
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
    "doo": "2018-11-05T15:25:16.584Z", //data que ocorreu o evento (com as horas) (date of occurrence)
    "ver": "1.0.0", //versão do protocolo utilizada no sync
    "who": "sis.12458", //fonte dos dados que enviou o sync
    "org_id": "b253081c016x11eab2d30672699b542a", //chave da organização que recebeu os eventos
    "sta": 1, //status do processo 
    "dat":[ //array com os eventos já processados e suas informações
        {/** event object */},
        {/** event object */},
        ...
    ]
}
  • indicação dos status
Código Significado
1 processando sem erros
2 processando com erros
3 finalizado com erros
4 finalizado sem erros
  • eventos devem possuir o padrão:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
{
    "typ": "update", //identificador do ação do evento enviado (insert, update e delete )
    "obj": {
        /*payload dos objetos já processados */
        "user": [ // array com os status dos objetos de usuários já processados
          {/** objeto status */},
          {/** objeto status */},
          {/** objeto status */},
          ...
        ],
        "section": [ // array com os status dos objetos de turmas já processados
          {/** objeto status */},
          ...
        ],
        "studentparent": [ // array com os status dos objetos da relação aluno responsável já processados
          {/** objeto status */},
          ...
        ],
        "sectionstudent": [ // array com os status dos objetos da relação turma aluno já processados
          {/** objeto status */},
          ...
        ],
        "sectionteacher": [ // array com os status dos objetos da relação turma professor já processados
          {/** objeto status */},
          ...
        ]
    }
}
  • cada objeto de status possui a seguinte formatação
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
{
    "sta": { //status
        "msg": "CPF inválido ...", //msg do erro
        "typ": "e" //e = error, w = warning, i = info
    },
    "obj":{ //detalhes do objeto 
        "id": "a7a82c46a25d4fa8979e273f5197cab4", //id do hub (caso sucesso)
        "sis_id": "123123", //identificador do sistema acadêmico
        "createdAt": "2018-11-05T15:25:16.584Z", //data da criação do registro (caso sucesso)
        "updatedAt": "2018-11-05T16:14:58.856Z", //data da última modificação do registro (caso sucesso)
    }
}

Observação

  • Apesar do HUB retornar o identificador único do objeto, recomendamos sempre usar o sys_id como referência aos objetos enviados