Primeiramente, o Appserver deve ser configurado para o WebService ser disponibilizado.(01. Configuração)

Exemplo:

IMG01

**OBS: Este exemplo necessita ser ajustado de acordo com a configuração de cada base. Ler a documentação para entender o que significa cada parâmetro.


O AppServer mostra, discretamente, se o servidor rest está configurado:


Logo após, é possível acessar uma página web confirmando que o servidor está ok. A URL desta página é composta: localhost(Ainda não sei como mudar isso) + Port(tag HTTPREST01 do exemplo IMG01) / URL (tag URL do exemplo IMG01):


Esta parte em questão acima, FWModel é um serviço que permite a utilização das regras de negócio (Model) baseadas em Submodelos,Estrutura de Dados e validações em código desenvolvidas pelas área de negócio, permitindo a sua reutilização em forma de serviços. É recomendável a leitura sobre.


-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

MAIS IMPORTANTE DE TUDO: O FONTE DEVE ESTAR EM MVC! Não sei até que ponto ele funciona fora do MVC.

Para um fonte estar disponível para integração via REST, ele precisa estar "publicado" no RPO. Para isto, basta inserir a seguinte linha no fonte que deseja "publicar":

PUBLISH USER MODEL REST NAME <nome> source <fonte> RESOURCE OBJECT <objeto> (documentação: http://tdn.totvs.com/display/public/PROT/FWRestModel+-+API+RESTful+dos+modelos+de+dados+do+Protheus).

Para um melhor controle, criamos um fonte para concentrar todas as publicações(padrão também adotado pelo GFE e pelo jurídico).


Para validar, é preciso de um software que faça a comunição com API Web Service REST. Como exemplos de programas, podemos citar o SoapUI ou a extensão Postman do Navegador Chrome.

A utilização do POSTMAN é simples.Basta informar a URL, e informar a ação desejada(figura abaixo). 

O GET retorna a estruta dos registros já existentes no banco.


Com base nessa estrutura, deve-se montar a estrutura para o POST(inserção) de registros.

Basicamente, 3 fatores são necessários:

 1.

"id": "nome do fonte publicado",
"operation": operação do ADVPL (3 - inserção, 4 - alteração, etc),
"models": os modelos que serão usados na operação(os nomes deve estar identico ao do fonte)

2.

"id": "o nome do model",
"modeltype": "pode ser field ou grid, isso tá definido la no fonte se é addField ou addGrid"  ,
"fields": os campos que existem no modelo

3.

{
"id": "Nome do campo: DXL_SAFRA",
"order": ordem dele no dicionário: 4,
"value": "valor a ser usado, sempre entre aspas mesmo sendo numérico"
}


Aqui, somente para consulta e melhor visualização, segue o do código da imagem acima:

{
"id": "AGRA601",
"operation": 3,
"models": [
{
"id": "DXLMASTER",
"modeltype": "FIELDS",
"fields": [
{
"id": "DXL_SAFRA",
"order": 4,
"value": "2017"
},
{
"id": "DXL_CODPRO",
"order": 5,
"value": "00001"
},
{
"id": "DXL_PRDTOR",
"order": 6,
"value": "000001"
},
{
"id": "DXL_LJPRO",
"order": 7,
"value": "01"
},
{
"id": "DXL_FAZ",
"order": 9,
"value": "01"
},
{
"id": "DXL_TALHAO",
"order": 11,
"value": "TL0001"
},
{
"id": "DXL_CODVAR",
"order": 12,
"value": "000001"
},
{
"id": "DXL_LOCAL",
"order": 14,
"value": "01"
},
{
"id": "DXL_BORDA",
"order": 18,
"value": "2"
},
{
"id": "DXL_RDMTOP",
"order": 19,
"value": "40.00"
},
{
"id": "DXL_TPRENS",
"order": 21,
"value": "1"
},
{
"id": "DXL_STATUS",
"order": 32,
"value": "1"
}
]
}
]
}


Após isso, clicando em SEND, o programa retorna um registro, também em JSON, informando os dados que foram usados na operação:

Pronto! Só verificar no banco se tudo deu certo!


Caso algum dado seja informado errado e o modelo fo fonte invalide a operação, a mensagem exibida é a seguinte:

Neste caso, eu inseri uma safra que não existe.



---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Alguns comentários úteis:



Documentações:

REST ADVPL