A Carol possui autenticação OAuth, podendo ser explorado a autenticação API Key (também conhecido como API Token ou Connector Token)algumas formas para efetuar o consumo de dados por aplicativos terceiros. O formato mais convencional é através de "filters" ou "named queries".
Índice | ||||
---|---|---|---|---|
|
Abaixo um fluxo demonstrando o processo de login integrado ao API Key:de consumo de dados da Carol através de filter ou named queries:
<<Diagrama sequencia login OAuth + API Key>>
Abaixo é listado os principais serviços ligados ao fluxo OAuthde consumo de dados:
Esses serviços permitem efetuar a autenticação na Carol e efetuar a validação de um token já existente. Vamos ver os detalhes desses serviços:
Este endpoint permite efetuar a autenticação na Carol, validando se o usuário e a senha possuem acesso à plataforma. Abaixo é detalhado os parâmetros necessários:
...
Este parâmetro aceita um dos seguintes valores: password ou refresh_token.
Password é utilizado no fluxo de geração do token, enquanto refresh_token é utilizado par renovar um token já existente.
...
Estes serviços permitem o consumo de dados através de consultas (filter/queries) ou através de consultas nomeadas (named-queries). Ambos recursos serão detalhados nos próximos capítulos.
A forma mais convencional de consumo de dados na Carol é através de consultas (filter/queries) e consultas nomeadas (named queries). Esses recursos permitem o consumo de dados considerando a estrutura de dados definida no data model.
A Carol possui uma série de recursos ligados às consultas para consumo dos dados. Para buscar detalhes do serviços, você pode consultar o seguinte link: https://docs.carol.ai/docs/querying-data
O print-screen abaixo mostra o serviço utilizado para executar os filtros/queries:
Informações | ||
---|---|---|
| ||
Quando executando filters com o scrollId (scrollable) ativado, sempre deve ser considerado o scrollID retornado na request, utilizando este para a próxima request: /api/v3/queries/filter/{scrollId} |
Este serviço retorna uma lista de golden records, no qual será detalhado no próximo capítulo.
Outra forma de trabalhar com consultas na Carol é através de named queries. As named queries permitem armazenar o filtro/query na Carol, permitindo assim uma manutenção mais ágil da named query.
A named query possui os mesmos recursos disponíveis na documentação acima compartilhada (https://docs.carol.ai/docs/querying-data), tendo como diferença é que o filtro fica armazenado na Carol e o aplicativo externo (consumidor) vai apenas referenciar à consulta armazenada na Carol. Os beneficios ligados a este recurso são:
Abaixo é apresentado o serviço responsável por executar uma named query:
A seguir, um exemplo de um "Filter":
{
"excludeMergePending": false,
"filtering": true,
"minimumShouldMatch": 1,
"mustList": [
{
"mdmFilterType": "TYPE_FILTER",
"mdmValue": "deviceGolden"
},
{
"mdmFilterType": "TERM_FILTER",
"mdmKey": "mdmGoldenFieldAndValues.integraterm",
"mdmValue": true
},
{
"mdmFilterType": "WILDCARD_FILTER",
"mdmKey": "mdmGoldenFieldAndValues.devicedescription",
"mdmValue": "{{deviceDescription}}"
}
],
"resolveRelationships": false
}
As named queries são filtros dentro de um envelope (estrutura Json), armazenados na Carol. Os filtros ficam encapsulados conforme abaixo:
{
"mdmCacheRevalidationTimeInSeconds": 0,
"mdmCacheTimeInSeconds": 0,
"mdmFilterQuery": {
"excludeMergePending": false,
"filtering": true,
"minimumShouldMatch": 1,
"mustList": [
{
"mdmFilterType": "TYPE_FILTER",
"mdmValue": "deviceGolden"
},
{
"mdmFilterType": "TERM_FILTER",
"mdmKey": "mdmGoldenFieldAndValues.integraterm",
"mdmValue": true
},
{
"mdmFilterType": "WILDCARD_FILTER",
"mdmKey": "mdmGoldenFieldAndValues.devicedescription",
"mdmValue": "{{deviceDescription}}"
}
],
"resolveRelationships": false
},
"mdmQueryDescription": "Retorna a lista de dispositivos",
"mdmQueryName": "deviceList",
"mdmQueryPaid": false,
"mdmQueryParams": [
{
"mdmDescription": {},
"mdmEditable": true,
"mdmInherited": false,
"mdmLabel": {},
"mdmName": "deviceDescription",
"mdmRequired": false,
"mdmValueType": "string"
}
],
"mdmReturnFields": [],
"mdmTimeoutInSeconds": 55,
"mdmType": "deviceGolden"
}
Um destaque para o atributo "mdmFilterQuery
" que possui o filtro que será executado quando a named query "deviceList" for executada.
O print-screen exibe qual o serviço responsável por adicionar a named query:
Após salvar a named query, um código (mdmId) é retornado referente a named query. Este código é utilizado para atualizar e eliminar a named query. O serviço abaixo é o responsável por atualizar a named query:
O serviço a seguir retorna a lista de named queries existentes, fazendo com que seja possível recuperar todas as named queries existentes neste momento no ambiente:
Após adicionar uma named query (e obter o código mdmId) é possível eliminar a named query com o serviço abaixo:
O parâmetro "force" indica se a named query deverá ser elininado mesmo q eu tenha referência por outros recursos, como um Insight ou Carol App.
Você pode entender a estrutura dos registros de Golden Record consumidos nesta documentação: https://tdn.totvs.com/display/public/CARL/Detalhes+Golden+Record
Abaixo é um exemplo da request usando o comando "curl":
curl -X POST "https://clockin.carol.ai/api/v1/oauth2/token" -H "accept: application/json" -H "content-type: application/x-www-form-urlencoded" -d "grant_type=password&connectorId=clockinmobile&username=robson.poffo%40totvs.com&password=SENHA_AQUI&subdomain=clockin&orgSubdomain=global"
O resultado da request é semelhante ao abaixo:
{ "access_token": "1e2fe288fa3a4ca38257294008081317", "client_id": "4c2c9090e7c611e893bf0e900682978b_33dd1190ff2c11e8858be609736e2a59_c1367ca0e86311e8b979aedbc4a09666_mdmConnector", "expires_in": 3495, "refresh_token": "1fd8bc5763734ad0b8e18e2cd328f2f8", "state": "", "timeIssuedInMillis": 1591855130722, "token_type": "bearer" }
Este endpoint permite resgatar detalhes referente ao token, inclusive verificar se o token ainda esta valido:
...
Access token gerado pelo endpoint "token".
Abaixo é um exemplo da request usando o comando "curl":
curl -X GET "https://clockin.carol.ai/api/v1/oauth2/token/1e2fe288fa3a4ca38257294008081317/userAccessDetails" -H "accept: application/json"
O resultado da request é semelhante ao abaixo:
{ "envUserId": "c1367ca0e86311e8b979aedbc4a09666", "externalAppId": "33dd1190ff2c11e8858be609736e2a59", "loginLevel": "mdmTenant", "orgId": "856e0510729e11e99928acde48001122", "refreshToken": "1fd8bc5763734ad0b8e18e2cd328f2f8", "system": false, "tenantId": "4c2c9090e7c611e893bf0e900682978b", "userId": "fe115382754247d883d9a11b88b3d96e" }
Uma vez que a autenticação ocorreu, teremos o access_token disponível. Este valor deve ser insirido no swagger no atributo "Access Token" (parte superior central).
As subsequentes requests vão autenticadas conforme a request a seguir:
curl -X GET "https://clockin.carol.ai/api/v1/users?pageSize=10&sortOrder=ASC" -H "accept: application/json" -H "Authorization: 1e2fe288fa3a4ca38257294008081317"
HTML |
---|
<!-- esconder o menu --> <style> div.theme-default .ia-splitter #main { margin-left: 0px; } .ia-fixed-sidebar, .ia-splitter-left { display: none; } #main { padding-left: 10px; padding-right: 10px; overflow-x: hidden; } .aui-header-primary .aui-nav, .aui-page-panel { margin-left: 0px !important; } .aui-header-primary .aui-nav { margin-left: 0px !important; } </style> |