Serverless Functions (FaaS) for EO API
In this repo you'll find the backend functions for web (micro) services.
Currently available 'services':
-
services/content-hub
: Contains micro services to communicate with headless CMS / Content HUB
- /articles [GET] all, by Id, by slug , by environment --> items:[]
- /forms/:id [GET] by Id --> item:{}
- /pages [GET] all, by Id, by slug --> items:[]
- /persons [GET] all, by Id, by slug --> items:[]
- /pressreleases [GET] all, by Id, by slug --> items:[]
Filters (url params):
- domain
- limit
- offset
- textsearch
Related
- /persons/:presenterId/pressreleases?personType=contact|presenter
-
services/contact
: Microservice for contact by email
- /mailform [POST] form --> formData:{}
-
services/poms
: Microservice for Poms data
- /poms/:mid [GET] by Mid --> item:{}
How to install locally
Please make sure to have following dependencies installed locally:
- Node 10.x (
$ nvm use
) - Serverless Framework (
$ npm i serverless -g
) - Azure CLI (
$ brew update && brew install azure-cli
) - Install the CLI for EO's "Veilige Opslag": Veilige Opslag
Before you begin
... install npm packages (make sure you have set env var NPM_TOKEN
that corresponds with NPM Org eo
):
$ npm i
Local development
Decrypt and copy the .env-file from EO's "Veilige Opslag":
$ veilige-opslag fetch -elus api
To run a Serverless API server locally (offline), run this in root folder:
$ npm run dev
This will create local folders and fire up a webserver at http://0.0.0.0:7071. Find local endpoints in Terminal logs Http Functions:
.
When server has started, you can make API calls to localhost. Event data will be outputted to terminal.
Invoke function (locally)
Status:
- Invoke function currently doesn't work due to Webpack hooks
- Looks up functions in file
serverless.yml
at root
$ sls invoke local -f {functionName}
Deploy to Azure
-
Make sure you're not logged in with Azure in your shell
$ az logout
-
Easily activate Azure service principal by loading the appropriate environment variables using EO's CLI for "Veilige Opslag":
$ source ./loadenv.sh
-
To deploy to (default) dev stage, run:
$ sls deploy
-
Make sure to add the environment variables as "Application settings" in Azure Function App.
https://docs.microsoft.com/bs-latn-ba/azure/azure-functions/functions-how-to-use-azure-function-app-settings
Serverless (Azure) documentation
OpenAPI 3.0 driven documentation
1. Writing documentation
We've adopted (a clone of) the serverless-openapi-documentation plugin to document our API. This makes it possible to maintain our documentation right within our serverless.yml. As close to the code as possible!
Please refer to the [https://www.serverless.com/plugins/serverless-openapi-documentation/ ](Serverless OpenAPI Documentation) to write your docs.
2. Generate the OpenAPI Specification
Just use the following command to generate the specification:
$ serverless openapi generate
3. Viewing documentation
We import the resulting OpenAPI specification in our SwaggerHub: https://app.swaggerhub.com/apis-docs/EO-Studio-Digitaal/eo-api/1 (credentials reside in our LastPass account).
Improvements
- implement Serverless @multicloud library (platform agnostic sls app)
- invoke functions locally
Development Urls
##ARTICLES
###=list=
http://localhost:7071/api/articles
##PAGES
###=list=
http://localhost:7071/api/pages
##PRESSRELEASES
###=list=
http://localhost:7071/api/pressreleases
http://localhost:7071/api/pressreleases?offset=0&limit=2
http://localhost:7071/api/pressreleases?offset=0&limit=20&domain=corporate-eo-staging
###=textsearch=
http://localhost:7071/api/pressreleases?offset=0&limit=20&domain=corporate-eo-staging&textsearch=Anne%20Frank
###=get by id=
http://localhost:7071/api/pressreleases/65dee676-6852-4f6c-8e38-166b35f83ac4
###=get by slug=
http://localhost:7071/api/pressreleases?slug=het-is-weer-tijd-voor-een-nieuwe-naam-voor-de-afdeling-die-internet-dingen-doet
##PERSONS
###=list=
http://localhost:7071/api/persons
###=get by slug=
http://localhost:7071/api/persons?slug=deborah-van-geest
###=get by id=
http://localhost:7071/api/persons/6eefb87b-4854-4866-9ace-d46bbc501e06
###=textsearch=
http://localhost:7071/api/persons?textsearch=knevel
###=nested=
http://localhost:7071/api/persons/:personId/pressreleases?personType=contact|presenter
http://localhost:7071/api/persons/6eefb87b-4854-4866-9ace-d46bbc501e06/pressreleases?personType=contact
http://localhost:7071/api/persons/ec8dc644-505f-487d-af76-511489b1c547/pressreleases?personType=presenter
http://localhost:7071/api/persons/ec8dc644-505f-487d-af76-511489b1c547/pressreleases -> not implemented