some samples how to serve things
This commit is contained in:
12
bookshop/srv/ord-service.cds
Normal file
12
bookshop/srv/ord-service.cds
Normal file
@@ -0,0 +1,12 @@
|
||||
// @requires: 'ORDconsumer'
|
||||
@rest @path:'/ord/v1'
|
||||
service OrdService {
|
||||
@readonly entity documents {
|
||||
key id: String;
|
||||
}
|
||||
@readonly entity csn {
|
||||
key id: String;
|
||||
}
|
||||
|
||||
function api (service: String, format: String) returns {};
|
||||
}
|
||||
53
bookshop/srv/ord-service.mjs
Normal file
53
bookshop/srv/ord-service.mjs
Normal file
@@ -0,0 +1,53 @@
|
||||
import cds from '@sap/cds'
|
||||
export class OrdService extends cds.ApplicationService {
|
||||
init(){
|
||||
|
||||
this.on('READ','documents', req => {
|
||||
let csn = cds.context?.model || cds.model
|
||||
return { ord: csn }
|
||||
})
|
||||
|
||||
/**
|
||||
* Just an example to do something with id, if given.
|
||||
* Try it out with URLs like that:
|
||||
* http://localhost:4004/ord/v1/documents
|
||||
* http://localhost:4004/ord/v1/documents/CatalogService
|
||||
* http://localhost:4004/ord/v1/documents/CatalogService.Books
|
||||
* http://localhost:4004/ord/v1/documents/CatalogService.Authors
|
||||
*/
|
||||
this.on('READ','csn', req => {
|
||||
let csn = cds.context?.model || cds.model
|
||||
let { id } = req.data
|
||||
if (id) csn = csn.definitions[id] || 'not in model!'
|
||||
return { id, csn }
|
||||
})
|
||||
|
||||
/**
|
||||
* Just an example to serve arbitrary content with a function.
|
||||
* Try it out with URLs like that:
|
||||
* http://localhost:4004/ord/v1/api?service=CatalogService
|
||||
* http://localhost:4004/ord/v1/api?service=CatalogService&format=edmx
|
||||
* http://localhost:4004/ord/v1/api?service=CatalogService&format=edmx-v2
|
||||
* http://localhost:4004/ord/v1/api?service=CatalogService&format=openapi
|
||||
*/
|
||||
this.on('api', req => {
|
||||
let csn = cds.context?.model || cds.model
|
||||
let { service, format } = req.data
|
||||
let { res } = req.http
|
||||
if (!format) {
|
||||
if (!service) return res.send(csn)
|
||||
service = csn.services[service]
|
||||
return res.send({ definitions: [ service, ...service.entities ] .reduce ((all,e) => {
|
||||
let d = all[e.name] = {...e}
|
||||
delete d.projection // not part of the API
|
||||
delete d.query // not part of the API
|
||||
return all
|
||||
},{})})
|
||||
}
|
||||
let api = cds.compile(csn).to[format]({service})
|
||||
return res.send(api)
|
||||
})
|
||||
|
||||
return super.init()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user