O AdminService implementado em nosso cenário até agora expõe o modelo de dados subjacente de forma 1:1. Tais serviços são bastante raros. Em vez disso, os serviços geralmente expõem visões desnormalizadas adaptadas a casos de uso específicos. Vejamos um exemplo a seguir.
Modelamos um CatalogService que expõe livros e autores do modelo de domínio para uso em um aplicativo de livraria. Em outras palavras, este serviço destina-se a permitir que os usuários do catálogo acessem livros e seus autores e façam pedidos.
O novo serviço que estamos criando agora também está definido na pasta srv do projeto CAP. Utilizamos o arquivo cat-service.cds para isso (consulte a figura a seguir).

Primeiro, procedemos exatamente da mesma forma que com o AdminService: importamos todas as definições com o prefixo namespace com.sap.learning do arquivo db/schema.cds e definimos o alias local db para as definições importadas (linha 1).
As linhas 3 a 31 contêm um bloco service que define uma interface de serviço chamada CatalogService como uma coleção de entidades expostas. A anotação @path é usada para especificar o caminho de URL /cat sob o qual o serviço será acessível.
O CatalogService expõe duas entidades definidas como projeções em entidades do modelo de domínio subjacente. As linhas 5ff declaram uma entidade chamada Livros, que é uma visão da entidade Livros definida no modelo de domínio importado. Assim, uma entidade Authors é declarada nas linhas 18ff como uma projeção sobre a entidade Authors a partir do modelo de domínio.
Analisaremos a entidade Autores no CatalogService mais detalhadamente mais tarde. Primeiro, vamos dar uma olhada mais de perto na entidade Livros.
Em contraste com a entidade Books no AdminService, que expõe a entidade de domínio subjacente de uma forma 1:1, a entidade Books no CatalogService usa uma cláusula de seleção explícita. Isso significa que somente o que está explicitamente listado na cláusula select é exposto.
As expressões de caminho chamadas podem ser usadas na cláusula select para navegar pelas associações e/ou elementos estruturados.
No exemplo mostrado, a associação do autor da entidade modelo Livros é usada para acessar o nome do autor e isso é incluído na cláusula select como escritor.
Além disso, publCountry é uma associação definida na entidade modelo Livros. Ele é utilizado para relacionar a entidade Livros à lista de códigos sap.common.Countries . No exemplo, o nome do país dessa lista de códigos é incluído na cláusula select como publCountry.
O elemento de preço da entidade de domínio Livros tem um tipo estruturado. Os dois componentes montante e moeda deste tipo também são incluídos na cláusula select por meio de expressões de caminho correspondentes.

