Fornecimento de serviços

Objective

After completing this lesson, you will be able to criar serviços simples com base em modelos de domínio

Introdução - Conceitos centrais

Vejamos agora como criar serviços para acessar um modelo de dados fornecido.

Assista ao vídeo para saber mais sobre modelos de serviço.

Nota

O CAP suporta os protocolos OData V4 e REST prontos para uso. Além disso, o GraphQL pode ser servido usando o pacote de código aberto @cap-js/graphql. O protocolo padrão é OData V4.

Nesta lição, nos limitaremos à criação de definições de serviço e ao adaptador de protocolo OData V4 que atende automaticamente a todas as operações CRUD para as entidades expostas. Mais tarde, também discutiremos como implementar a lógica de domínio personalizado.

Modelos de serviço

Vejamos agora como escrever uma definição de serviço com CDS (linguagem de definição CDS) e CQL (linguagem de consulta CDS). Para isso, criamos um arquivo com a extensão .cds na pasta srv do projeto CAP. O nome do arquivo é arbitrário, em nosso exemplo usamos admin-service.cds como nome (veja a figura Uma Definição de Serviço Simples).

Na linha 1 da definição de serviço, a diretiva using é utilizada para importar as definições do modelo de domínio. O caminho from especificado começando com ../ é resolvido em relação à pasta srv na qual a definição de serviço está localizada. Isso importa todas as definições com o prefixo de espaço de nomes com.sap.learning do arquivo db/schema.cds. O alias local db está configurado para as definições importadas.

As linhas 4 a 9 contêm um bloco service que define uma interface de serviço chamada AdminService como uma coleção de entidades expostas. Este serviço destina-se a administradores para gerenciar autores e livros dentro de uma aplicação.

Por padrão, o ponto de acesso de um serviço exposto é construído com base em seu nome, seguindo algumas convenções (a string 'Serviço' é omitida e o caso kebab-é aplicado). Se você quiser substituir o caminho padrão ou torná-lo explícito, pode adicionar a anotação @path como no exemplo. Lá, a anotação @path especifica o caminho de URL sob o qual este serviço será acessível, nomeadamente /admin.

Entidades expostas

As entidades expostas por um serviço são geralmente projeções em entidades do modelo de dados subjacente. Definições de visão padrão, usando as select from ou as projection on, podem ser usadas para expor entidades.

Duas entidades são definidas como projeções dentro do AdminService:

  • A Linha 6 declara uma entidade chamada Livros dentro do Serviço de Administração. Esta é uma projeção, ou seja, é uma visão da entidade Livros definida no modelo de domínio importado.
  • Da mesma forma, na linha 7, uma entidade Authors é declarada como uma projeção sobre a entidade Authors do modelo de domínio.

Nota

As projeções são usadas para moldar dados de uma forma específica para um determinado serviço, potencialmente limitando os campos ou alterando a estrutura dos dados da entidade modelo para atender às necessidades do consumidor do serviço.

A definição de serviço no exemplo exibido permite o acesso aos dados subjacentes de uma forma 1:1.

Provedores de serviços genéricos

Quando executamos o comando cds watch no terminal após o modelo de serviço ter sido implementado, é exibido que o modelo de serviço é carregado do arquivo srv/admin-service.cds descrito acima, além do modelo de domínio. O terminal também mostra que o AdminService é servido através do caminho "/admin".

Visões de banco de dados

Quando cds watch é executado, as instruções SQL DDL são geradas com base no modelo de serviço e executadas no banco de dados configurado. Essas instruções SQL DDL também podem ser criadas manualmente usando o comando cds compile já discutido em conexão com o Domain Model.

Para exibir as instruções SQL DDL geradas para o exemplo aqui discutido, execute o seguinte comando no diretório raiz do projeto CAP no terminal:

Code Snippet
1
cds compile srv/admin-service.cds --to sql

Dica

Em vez de inserir o comando acima no terminal, você também pode selecionar a seguinte entrada no menu de contexto do arquivo .cds: CDS PreviewPreview as sql. Isso gera a mesma saída que o comando de linha de comando.

O script SQL DDL gerado contém as instruções CREATE TABLE já discutidas acima para as tabelas com_sap_learning_Authors e com_sap_learning_Books. Elas pertencem às entidades do Domain Model. Além disso, as instruções CREATE VIEW mostradas na figura Visões geradas agora também são geradas. Isso significa que as duas entidades projetadas Autores e Livros do modelo de serviço são criadas como visões no banco de dados. As visões leem seus dados a partir das tabelas de modelo geradas.

Serviço OData

O AdminService servido no exemplo é um serviço OData V4 totalmente implementado - servido pelos tempos de execução genéricos do CAP, sem necessidade de codificação de implementação.

Se você enviar uma solicitação GET para o URL raiz do serviço, receberá de volta o documento de serviço, que lista os recursos oferecidos pelo serviço (consulte a figura Documento de serviço).

O serviço aqui discutido contém - com base no modelo de serviço - os dois conjuntos de entidades Autores e Livros. Eles estão associados aos dois pontos de acesso de serviço /admin/Authors e /admin/Books. Todas as operações OData CRUD são suportadas prontas para serem utilizadas por meio desses dois pontos de acesso. Ao criar novas entidades de autores ou livros, o respectivo campo-chave de ID é preenchido automaticamente, uma vez que os campos-chave foram digitados com UUID.

Demonstração e exercício: definir um serviço

Nota

Como exercício, execute as instruções passo a passo na demonstração a seguir no SAP Business Application Studio.

Como ponto de partida para o exercício, use o resultado do exercício anterior Capturar um Domain Model se você o tiver concluído com sucesso. Como alternativa, você também pode utilizar a ramificação 2_domain_model do seguinte repositório GitHub como ponto de partida:

https://github.com/SAP-samples/cap-development-learning-journey

A implementação completa da simulação pode ser encontrada no ramo 3_service_definition do repositório GitHub.

Informações detalhadas sobre o conteúdo do repositório e como usá-lo podem ser encontradas aqui.

Assista ao vídeo para ver como definir um serviço.