
Building Modern Applications with SAP CAP
A comprehensive guide to developing enterprise applications using the SAP Cloud Application Programming Model
The SAP Cloud Application Programming Model (CAP) is a framework of languages, libraries, and tools for building enterprise-grade services and applications. It guides developers through proven best practices and accelerates development with pre-built solutions for common tasks.
Why Choose SAP CAP?
CAP provides a declarative approach to building business applications, allowing developers to focus on domain logic rather than technical complexities. Key benefits include:
- Reduced Boilerplate: Focus on business logic, not infrastructure code
- Best Practices Built-in: Security, multitenancy, and extensibility out of the box
- Technology Agnostic: Support for Node.js and Java runtimes
- Cloud Native: Designed for cloud deployment from the ground up
Core Concepts
Domain Modeling with CDS
Core Data Services (CDS) is the backbone of CAP, providing a powerful way to define your domain model:
entity Products {
key ID : Integer;
name : String(100);
description : String;
price : Decimal(10,2);
stock : Integer;
category : Association to Categories;
}
entity Categories {
key ID : Integer;
name : String(50);
products : Association to many Products on products.category = $self;
}
Service Definition
Services expose your domain model through RESTful APIs and OData:
service CatalogService {
entity Products as projection on db.Products;
entity Categories as projection on db.Categories;
action replenishStock(product: Products:ID, quantity: Integer);
}
Building Your First CAP Application
Step 1: Project Setup
Initialize a new CAP project:
cds init my-bookshop
cd my-bookshop
npm install
Step 2: Define Your Domain Model
Create your data model in db/schema.cds
:
namespace my.bookshop;
entity Books {
key ID : Integer;
title : String;
author : Association to Authors;
stock : Integer;
}
entity Authors {
key ID : Integer;
name : String;
books : Association to many Books on books.author = $self;
}
Step 3: Create Services
Define services in srv/catalog-service.cds
:
using my.bookshop as my from '../db/schema';
service CatalogService {
@readonly entity Books as projection on my.Books;
@readonly entity Authors as projection on my.Authors;
}
Step 4: Add Business Logic
Implement custom logic in srv/catalog-service.js
:
module.exports = (srv) => {
srv.after('READ', 'Books', (books) => {
books.forEach(book => {
if (book.stock > 100) book.title += ' -- Bestseller!'
})
})
}
Advanced Features
Authentication and Authorization
CAP provides built-in support for authentication:
service CatalogService @(requires: 'authenticated-user') {
entity Books @(restrict: [
{ grant: 'READ', to: 'Viewer' },
{ grant: '*', to: 'Admin' }
]) as projection on my.Books;
}
Multitenancy
Enable SaaS applications with built-in multitenancy support:
{
"cds": {
"requires": {
"multitenancy": true,
"extensibility": true
}
}
}
Draft Handling
Support for draft-enabled entities:
service CatalogService {
@odata.draft.enabled
entity Books as projection on my.Books;
}
Deployment Options
SAP BTP Cloud Foundry
Deploy to Cloud Foundry with a simple push:
cf push
Kyma Runtime
Deploy as microservices on Kubernetes:
cds build --production
pack build myapp --builder paketobuildpacks/builder:base
Best Practices
- Use CDS for Everything: Leverage CDS for data models, service definitions, and UI annotations
- Follow Domain-Driven Design: Structure your application around business domains
- Implement Proper Error Handling: Use CAP’s error classes for consistent error responses
- Write Tests Early: Use CAP’s testing utilities for unit and integration tests
- Monitor Performance: Implement logging and monitoring from the start
Integration with SAP Services
CAP applications integrate seamlessly with SAP services:
- SAP HANA: Native support for HANA-specific features
- SAP Event Mesh: Built-in messaging capabilities
- SAP Workflow: Process automation integration
- SAP Document Management: File handling services
Conclusion
SAP CAP dramatically simplifies enterprise application development while ensuring best practices and enterprise-grade capabilities. Its declarative approach, combined with powerful abstractions, enables developers to build sophisticated applications with minimal effort.
In our next post, we’ll explore how to implement event-driven architectures using SAP Event Mesh and CAP.