Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/idris-maps/tupplur
a quick rest
https://github.com/idris-maps/tupplur
deno-kv json-schema rest-api
Last synced: about 2 months ago
JSON representation
a quick rest
- Host: GitHub
- URL: https://github.com/idris-maps/tupplur
- Owner: idris-maps
- License: gpl-3.0
- Created: 2023-10-22T20:03:19.000Z (about 1 year ago)
- Default Branch: master
- Last Pushed: 2023-11-20T21:57:16.000Z (about 1 year ago)
- Last Synced: 2024-09-20T00:26:37.146Z (4 months ago)
- Topics: deno-kv, json-schema, rest-api
- Language: TypeScript
- Homepage:
- Size: 680 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
![tupplur](./icon.png)
# tupplur
Create a quick rest api with
[JSON schema](https://json-schema.org/understanding-json-schema). Based on
[deno kv](https://deno.com/kv) for storage and [ajv](https://ajv.js.org/) for
validation.### run locally
Install
```
deno install -n tupplur --allow-net --allow-read --allow-write --allow-env --unstable https://deno.land/x/tupplur/local.ts
```Why all these permissions?
- `--allow-net` to accept incoming requests
- `--allow-read` to read the database
- `--allow-write` to write to the database
- `--allow-env` to read the `.env` file
- `--unstable` because deno kv still isCreate an `.env` file like this
```
SUPER_USER_KEY=hard_to_guess_string
DB_PATH=test.db
PORT=3333
```- `SUPER_USER_KEY` is what you are going to use to authenticate when managing
collections
- `DB_PATH` is where the data is going to be saved (if not defined, will use
global deno kv store)
- `PORT` the port on which the service runs (defaults to 3333)Start the server
```
tupplur
```### create your first collection
Make a POST request to `/collections` with `name` (`string`) and `schema` (the
JSON schema) in the body and `Authentication: Bearer $SUPER_USER_KEY` in the
headers.### manage access to the collection
Make a POST request to `/collections/:name/access`, with the same authentication
and a body like:```json
{
"key": "public",
"get": true,
"post": true,
"patch": true,
"put": true,
"delete": true
}
```This will allow anyone to make `get`, `post`, `patch`, `put` and `delete`
requests to `/api/:name` endpoints. Restrict by omiting methods or setting them
to `false`. By default only the super user has access to the endpoints.The key `public` means the users do not need to be authenticated. If you want to
use it with other keys than `SUPER_USER_KEY` but still not it being public, use
whatever hard to guess string instead of `public` and use that in the
authentication header. You can have multiple keys with different access.see [the example requests](./example.http) for more endpoints to manage
collections.### use the api
Start the server and go to http://localhost:3333 (if you did not change the
port) to see and try the available endpoints.## run on deno deploy
Create a project in https://dash.deno.com/projects
Add a `SUPER_USER_KEY` environment variable to manage collections.
Run:
```
deployctl deploy --project YOUR_PROJECT_NAME --token=YOUR_TOKEN deploy.ts
```