create a jsonserver-file sample e.g. db.json
{
"posts": [
{ "id": 1, "title": "json-server", "author": "typicode" },
{ "id": 2, "title": "test", "author": "yourAuthor" }
],
"comments": [
{ "id": 1, "body": "some comment", "postId": 1 }
],
"profile": { "name": "typicode" }
}
execute command
Verify that you have a AWS account and set appropriate credentials
execute command
jsonsls create-stack db.json {optional: STAGE}
When the deployment was successful you can see following output
Service Information
service: serverless-json-server
stage: dev
region: eu-central-1
stack: serverless-json-server-dev
api keys:
serverless-json-server.dev: {API-KEY}
endpoints:
ANY - https://xxxxxx.execute-api.eu-central-1.amazonaws.com/dev/ <== {ENDPOINTURL}
ANY - https://xxxxxxx.eu-central-1.amazonaws.com/dev/{proxy+}
functions:
app: serverless-json-server-dev-app
layers:
None
Serverless: Removing old service artifacts from S3...
Open the {ENDPOINTURL}: https://xxxxxx.execute-api.eu-central-1.amazonaws.com/dev/ that you received as output
MIND: If you have set enableApiKeyAuth to true => SwaggerUI )
Default Schema:
Default route is posts: (see db.json) curl -H "Content-Type: application/json" https://xxxxxx.execute-api.eu-central-1.amazonaws.com/dev/api/posts # or another route given in db.json file curl -H "Content-Type: application/json" https://xxxxxx.execute-api.eu-central-1.amazonaws.com/dev/api/{route} # with enableApiKeyAuth=true curl -H "x-api-key: {API-KEY}" -H "Content-Type: application/json" https://xxxxxx.execute-api.eu-central-1.amazonaws.com/dev/api/{route}
What`s my {route} ? -> see json-server documentation
Please have a look at this example to see how you can add own middleware and authentication.
https://github.com/pharindoko/jsonsls-vue-cognito-demo
update local db.json file in root directory with new values
re-deploy the stack via serverless framework
delete db.json file in S3 Bucket
Make a GET request against the root url https://xxxxxx.execute-api.eu-central-1.amazonaws.com/dev/api
curl -H "Content-Type: application/json" https://xxxxxx.execute-api.eu-central-1.amazonaws.com/dev/api # with enableApiKeyAuth=true curl -H "x-api-key: {API-KEY}" -H "Content-Type: application/json" https://xxxxxx.execute-api.eu-central-1.amazonaws.com/dev/api/{route}
=> With the next request a new db.json file will be created in the S3 Bucket
Adapt settings (in the stackfolder you can find this config under ./config/appconfig.json) Attribute Description Type Default readOnly Make API readonly - all API - write operations are forbidden (http 403)) string false enableApiKeyAuth Make your routes private by using an additional ApiKey boolean false enableJSONValidation validate JSON file at start boolean true enableSwagger enable or disable Swagger (and related Graphql) features boolean truePRs are welcome!
Please have a look into the makefile to get the understanding how this construct is built. There are components managed: (under /packages)
cli
server
template
a serverless framework template
can be used standalone without the cli
serverless create --template-url https://github.com/pharindoko/json-serverless/tree/master/packages/template npm i npm run build sls deploy sls offline
Lerna will be used to manage the monorepo`s dependencies.
Start the server componentthe json file will be loaded directly from your local filesystem. No AWS access is needed.
Start the template componentThis part is using the serverless offline and is close to how the solution behaves in the cloud.
the json file will be loaded directly from your local filesystem. No AWS access is needed.
you should see a direct output of all local endpoints.
the json file will be loaded directly from your local filesystem. No AWS access is needed.
Cannot use Swagger UI when enableApiKeyAuth is trueThe apiKey is set in AWS API Gateway. This means all requests (even the standard route) need to use the API-KEY.
If you want to see the Swagger UI you need to add a plugin e.g. ModHeader to Chrome and add the needed headers:
Ensure you have credentials for AWS set.
Destroy the stack in the cloud I deployed the solution but I get back a http 500 errorCheck Cloudwatch Logs in AWS - the issue should be describe there. Log has the same name as the stack that has been created.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4