Os seguintes arquivos que devem ser configurados:
MVCBrServer.config
oData.ServiceModel.json
As configurações são as mesmas para o Servidor em Standalone ou em Serviço do Windows.
1º vamos configura o arquivo MVCBrServer.config, ele é responsável por informar ao servidor qual o drive de banco de dados a ser usado e o caminho da base de dados, que no exemplo vou mostrar usando uma base em Firebird.
[code lang=”pascal”]
{ "Config":
{ "WSPort":"8080",
"driverid":"FB",
"Server":"localhost",
"Database":"C:\\Diretorio_BD\\BD_NOME.FDB",
"user_name":"sysdba",
"Password":"masterkey",
"VendorLib":""
}
}
[/code]
Lembrando que o caminho da base deve ser utilizado duas barras “\\” ou barra invertida “/” para separação dos diretórios.
A estrutura do arquivo MVCBrServer.config:
"Config"
conterá o objeto de parametrização com as seguintes propriedades:"WSPort"
recebe o número da porta que o ServidorMVCBr irá responder;"driverid"
recebe a sigla correspondente ao banco de dados utilizado (“FB”=Firebird, “PG”=PostgreSQL, “MYSQL”=MySQL e “MSSQL”=Microsoft SQL Server);"Server"
recebe o ip ou hostname do servidor de banco de dados;"Database"
recebe o caminho e o nome da sua base de dados;"user_name"
recebe o nome do usuário que se conecta em sua base de dados;"Password"
recebe a senha do usuário que se conecta em sua base de dados;"VendorLib"
recebe o caminho e o nome da DLL-Dynamic-link library caso seu banco de dados exija para a conexão.
2º vamos configura o arquivo oData.ServiceModel.json, ele é responsável por informar ao servidor qual os recursos serão disponibilizado.
[code lang=”pascal”]
{
"@odata.context": "http://localhost:8080/OData/OData.svc",
"__comment": "Services list all resource available to OData.Service",
"OData.Services": [
{
"_comments_":"Products table service",
"resource": "produtos",
"collection": "produtos",
"keyID": "codigo",
"maxpagesize": 100,
"fields": "produtos.codigo,produtos.descricao,produtos.unidade,produtos.grupo,produtos.preco",
"method": "GET,PATCH,POST,PUT,DELETE",
"relations": [{
"resource": "grupos",
"sourceKey": "grupo",
"targetKey": "codigo",
"join": "left join grupos on (produtos.grupo=grupos.grupo)"
}]
},
{
"_comments_":"Goups table service",
"resource": "grupos",
"collection": "grupos",
"keyID": "codigo",
"fields": "*",
"method": "GET",
"maxpagesize": 100,
"relations": [{
"resource": "produtos",
"sourceKey": "codigo",
"targetKey": "grupo",
"join": "join produtos on (grupos.codigo=produtos.grupo)"
}],
"expands": [{
"resource": "produtos",
"filter": "grupos.codigo=:grupo"
}]
}
],
"OData.Execute": [
{
"_comments_":"ExecSQL for exec_procedure",
"resource": "exec_procedure",
"procedure": "exec_procedure",
"params": "filial,dcto,data",
"returnRows": true
}
]
}
[/code]
Lembrando que tem um aplicativo para gerar o arquivo oData.ServiceModel.json, o GeradorMetadata, que está disponível junto dos fontes no GitHub no diretório MVCBr/MVCBrServer/GeradorMetadata (Projeto MVCBr).
As propriedades do arquivo oData.ServiceModel.json:
"@odata.context"
contem a URL do servidor OData, *obrigatório;"__comment"
descrição dos serviços do servidor OData, não é obrigatório;"OData.Services"
é um array de objetos que contem os serviços disponibilizados, cada item do array deve conter o objeto com as seguintes propriedades:
"_comments_"
uma descrição do serviço, não é obrigatório;"resource"
conterá o nome do serviço que será disponibilizado, não se pode usar caracteres especiais pois esse nome será parte da URL e é case sensitivo, *obrigatório;"collection"
conterá o nome da sua tabela do seu banco de dados, sendo que o nome do serviço pode ser totalmente diferente do nome de sua tabela, *obrigatório;"keyID"
conterá o nome do campo chave da sua tabela, *obrigatório;"maxpagesize"
conterá a quantidade de registro que será disponibilizado na consulta do serviço, não é obrigatório, mas recomendo 100% a utilização, pois se não tiver uma limitação, ao chamar o serviço sem filtro irá trazer todos os registro de sua tabela, com isso deixando seu cliente lento;"fields"
conterá os campos de sua tabela que você quer disponibilizar, *obrigatório pelo menos um campo;"method"
conterá quais método de requisição seu serviço poderá receber, “GET,PATCH,DELETE,PUT,POST”, *obrigatório pelo menos um método;"relations"
é um array de objetos, que cada item terá um objeto com as seguinte propriedades:"resource"
nome do serviço relacionado;"sourceKey"
campo chave para relacionada ao serviço;"targetKey"
nome do serviço com a relação;"join"
sentença SQL da relação;
"expands"
é um array de objetos com os serviços disponibilizado, direciona os registros relacionados que devem ser recuperados no registro ou no conjunto que está sendo recuperado, cada item terá um objeto com as seguinte propriedades:"resource"
nome do serviço, *obrigatório;"filter"
Especifica uma expressão ou função que deve ser avaliada como verdadeira para que um registro seja retornado, *obrigatório;
"OData.Execute"
é um array de objetos com os serviços disponibilizado, de acordo com um procedimento existente no seu banco de dados, cada item terá um objeto com as seguinte propriedades:"_comments_"
uma descrição do serviço, não é obrigatório;"resource"
conterá o nome do serviço que será disponibilizado, não se pode usar caracteres especiais pois esse nome será parte da URL e é case sensitivo, *obrigatório;"procedure"
nome do seu procedimento na sua base de dados, *obrigatório;"params"
parâmetro do seu procedimento, *obrigatório se tiver no seu procedimento;"returnRows"
conterá “true” verdadeiro se o procedimento retorna registros e “false” falso para não retorna registros, *obrigatório;