Skip to main content

Configurando Ambientes

Na Solfácil existem vários ambientes para homologação e por muitas vezes é necessário trocar de ambiente em tempo de execução, para isso foi feita uma implementação que possa trocar esses ambientes.


Hoje conta-se com três tipos de ambientes a serem trocados, sendo eles:

AmbienteDescrição
Rest APIAmbiente de requisições rest.
GraphQL APIAmbiente de requisição graphql.
Keycloak (SSO)Ambiente de autenticação.

Conexão

O Projeto contém duas classes de conexão, uma para conexões Rest e GraphQL e outra para ambientes Keycloak.

utils/connection/Connection.ts
export default class Connection {  apiURL: string;  apiKey?: string;  constructor(apiURL: string, apiKey?: string) {    this.apiURL = apiURL;    this.apiKey = apiKey;  }}
ParâmetroObrigatórioDescrição
apiURLSimURL para a api que deve ser acessada.
apiKeyNãoChave da API que deve ser enviada no header.

utils/keycloak/KeycloakConnection.ts
export default class KeycloakConnection {  url: string;  realm: string;  client_id: string;  constructor(url: string, realm: string, client_id: string) {    this.url = url;    this.realm = realm;    this.client_id = client_id;  }}
ParâmetroObrigatórioDescrição
urlSimURL de acesso ao Keycloak
realmSimRealm para login no Keycloak.
client_idSimCliente ID para login no Keycloak

Rest API

Para qualquer ambiente as configurações estaram disponíveis na pasta utils, para Rest API's deve-se observar a pasta utils/connection/rest, nela irá conter as classes responsáveis por agrupar todas as requests de uma API.

Vamos pegar como exemplo utils/connection/rest/ConnectionsCore.ts, que é a classe responsável por agrupar todos os ambientes para acessar API's do projeto Core da Solfácil.

utils/connection/rest/ConnectionsCore.ts
import Connection from '../Connection';export default class ConnectionsCore {  static readonly development = new Connection(    'http://localhost:4000/v1',    '77a991a1-9086-4e88-a7db-0143c940cb96'  );  static readonly production = new Connection(    'http://prod.localhost:4000/v1',    '$2a$12$ZVD3Gt7Ri7Gwfg3Bx.Ygy.VRqBXLogILKYAYqo7ucayaTne3MMxtW'  );  static readonly staging = new Connection(    'http://stg.localhost:4000/v1/',    '$2a$12$ZVD3Gt7Ri7Gwfg3Bx.Ygy.VRqBXLogILKYAYqo7ucayaTne3MMxtW'  );}
i
Para saber: Caso seja necessário acessar mais de um ambiente de API rest basta criar uma nova classe de conexões com seus respectivos ambientes. Por exemplo: ConnectionsSolfacilPlus.ts.

GraphQL

Para ambientes graphql não é diferente de ambientes rest, basta configurar uma classe em utils/connection/graphql, por exemplo:

utils/connection/graphql/ConnectionsCoreGql.ts
import Connection from '../Connection';export default class ConnectionsCoreGql {  static readonly development = new Connection(    'https://user-apollo-server.herokuapp.com/graphql'  );  static readonly production = new Connection(    'http://prod.localhost:4000/v1/graphql'  );  static readonly staging = new Connection(    'http://stg.localhost:4000/v1//graphql'  );}

Keycloak (SSO)

Para ambientes keycloak segue-se o mesmo princípio, porém a classe de conexão é diferente e o local onde fica as coneções configuradas fica em utils/keycloak. Segue uma classe já configurada.

utils/keycloak/KeycloakConnections.ts
import KeycloakConnection from './KeycloakConnection';export default class KeycloakConnections {  static readonly development = new KeycloakConnection(    'http://localhost:8080',    'General',    'plasma'  );  static readonly production = new KeycloakConnection(    'https://sso.solfacil.com.br',    'General',    'plasma'  );  static readonly staging = new KeycloakConnection(    'https://stg-sso.solfacil.com.br',    'General',    'plasma'  );}