O web service REST do AdvPL não utiliza as seções HTTP e WebServices utilizadas para o configurar o modelo SOAP.

Apesar disso o REST também utiliza working threads para atender as requisições recebidas também pelo protocolo HTTP.

Observações
O protocolo HTTP do REST não atende a outros tipos de requisições como o HTTP do SOAP (que também atende arquivos estáticos, APW e APL)

A chave MAXSTRINGSIZE é obrigatória na seção GENERAL com valor mínimo 10 para que o REST suporte requisições com mais de 1Mb 

Alteração de comportamento

A partir da release 12.1.33 do Protheus, a ser liberada em Outubro de 2021, o comportamento padrão de autenticação de WebServices SOAP e REST será alterado. A partir desta versão, caso a chave Security não seja informada no arquivo appserver.ini, os serviços serão iniciados exigindo autenticação de usuário. Caso seja necessário trabalhar sem autenticação, a chave deverá ser configurada com o valor 0 (Exemplo: Security=0).



A função HTTP_START que prepara o Application Server como HTTP para REST, devendo ser configurada na seção ONSTART:

[GENERAL]
MAXSTRINGSIZE=10
 
[ONSTART]
JOBS=HTTPJOB
REFRESHRATE=120

[HTTPJOB]
MAIN=HTTP_START
ENVIRONMENT=environment

Seção HTTPV11 


Para habilitar o HTTP para REST criar a seção abaixo no appserver.ini:

[HTTPV11]
Enable=1
Sockets=HTTPREST
ParâmetroDescriçãoObrigatório
EnableIndica se o HTTP esta habilitadox
SocketsSeções com configuração de porta e URL (pelo menos uma seção)x


A chave Sockets referencia a(s) seção(ões) com a configuração de porta e URL que a mesma ira atender, permitindo que o Application Server seja configurado com mais de uma porta HTTP do REST:

[HTTPV11]
Enable=1
Sockets=HTTPREST,HTTPREST2

Seções Sockets 


Exemplo de configuração de uma seção Sockets:

[HTTPREST] 
Port=8080
IPsBind=
URIs=HTTPURI
Security=1
ParâmetroDescriçãoObrigatório
PortPorta HTTPx
IPsBindIndica os IPs que serão atendidos por essa porta, se não informado atenderá qualquer IP / DNS associado ao servidor
URIsSeções com configuração de URL e ambiente (pelo menos uma seção)x
SecurityIndica se a autenticação de requisição esta habilitadax
Observação
O HTTP do REST verifica existência do campo Authorization no HEADER da requisição, porém a autorização é realizada pelo framework do produto que esta utilizando o protocolo
Para facilitar o desenvolvimento e testes pode-se configurar a chave Security com valor 0 (zero) para desabilitar a autenticação


A chave URIs referencia a(s) seção(ões) com a configuração da URL que a porta irá atender, permite também que seja configurado com mais de uma URL:

[HTTPREST] 
Port=8080
IPsBind=
URIs=HTTPURI,HTTPURI2
Security=1

Seções URIs 


Exemplo de configuração de uma seção URIs:

[HTTPURI]
URL=/rest
PrepareIn=
Instances=1,1
Public=classe/path/get1,classe2/path/gety,classe3/path/post
NoTenant=classe/path/get2,classe2/path/getv,classe3/path/post2
ParâmetroDescriçãoObrigatório
URLIndica o endereço que será atendido
Nesse exemplo http://localhost:8080/rest
x
PrepareinInformações para preparação do ambiente das working threads
InstancesConfiguração de inicialização de working threadsx
PublicChave pública que contém listas de EndPoints que não possuem autenticação
NoTenantAo ser usada não será validada as empresas/filiais, apenas a autenticação do usuário
Observações
A preparação de ambiente da chave PrepareIn é realizada pelo framework do produto que esta utilizando o protocolo 
A chave Instances é configurada como no HTTP do SOAP. Documentação em Instances
A chave Public precisa ser utilizada com muita cautela, visto que ela desliga a segurança do endpoint permitindo acesso a qualquer um que conheço o endereço


Conexões TLS no AppServer

A partir da versão 17.3.0.20 do AppServer e LIB Label 20200727, o REST Server terá suporte ao TLS1.1 e TLS1.2.

Foi implementada também a versão TLS1.3 na lib do Protheus Label 20221128

Para que a configuração fique de acordo com o SSL já utilizado pelo binário, utilize o meio de configuração já existente.

No INI do REST, na Seção HTTPREST, adicione a chave a ser utilizada:

TLS1_0=1
TLS1_1=1
TLS1_2=1
TLS1_3=1

Valores válidos

Valor

Descrição

0 (default)

Desabilita

1

Habilita


Exemplo

[HTTPREST]
Port=8040
URIs=HTTPURI
SECURITY=1
SSL2=0
SSL3=1
TSL1_0=0
TSL1_1=1
TSL1_2=1
TSL1_3=1



A chave TLS1 foi mantida por compatibilidade, exemplo de utilização:

Valores válidos

Valor

Descrição

0 (default)Desabilita
1TLS 1.0
2TLS 1.1
3TLS 1.2

Exemplo

[HTTPREST]
Port=8040
URIs=HTTPURI
SECURITY=1
SSL2=0
SSL3=1
TLS1 = 3

A chave TLS1 está mantida em modo de compatibilidade. Isso significa que a atualização da aplicação irá funcionar adequadamente, porém esta chave deve ser substituída pelas novas versões TLS1_0, TLS1_1 e TLS1_2. Caso quaisquer das novas chaves do protocolo TLS sejam encontradas no arquivo de configuração, a aplicação não reconhecerá as informações contidas na TLS1.

Alerta de risco

Fique atento ao utilizar o parâmetro de configuração com a chave Security=0, pois isso fará com que as integrações (APIs) não exijam autenticação, consequentemente dados do seu ambiente poderão ser consultados sem qualquer controle de autorização.




Veja também

Instances 

Seção OnStart -- 29403

Seção [general], chave MaxStringSize