sroehrl / scaffold-api
the efficient PHP framework
Requires
- php: ^7.4
- ext-json: *
- mnsami/composer-custom-directory-installer: 1.1.*
- neoan3-apps/db: ^0.2.1
- neoan3-apps/file-away: 1.0.0
- neoan3-apps/ops: 2.0.*
- neoan3-apps/stateless: 1.0.*
- neoan3-apps/template: ^1
- neoan3-apps/transformer: ^1
- neoan3-model/index: ^0.0.1
This package is auto-updated.
Last update: 2024-12-11 08:05:14 UTC
README
Quick & dirty api scaffolding as a result of a twitch.tv/neoan3 session
What is this?
Create your backend in seconds and add your endpoints via command line. You don't need a database, this tool ships with a file-based database for your convenience. However, you can easily add a database at any point.
Out of the box, you have
- user registration
- user login/authentication
- JWT / stateless authentication endpoints
- development server
Installation
NOTE: requires neoan3-cli, PHP & composer to be globally available.
composer create-project sroehrl/scaffold-api
neoan3 develop
That's it, your project should run.
Usage
Within the project directory, run
php scaffold <yourAPIendpointName>
to generate get & post endpoints.
Modifications (or additional methods) to the endpoint can be achieved by editing the generated model & component files. Look into neoan3 for specifics.
user model
This project already ships with a user model & endpoints.
To register
POST /api.v1/users
{ "userName": "name82", "password": "123456", "whatever": "any-key-value-pair" }
response format:
{ "user": { "userName": "name82", "_id": "id-with-high-entropy" }, "token": "JWT-token" }
All generated calls require a JWT-token to be used.
// e.g. axios const config = { headers: { Authorization: `Bearer ${token}` } }; axios.get('http://localhost:8080/api.v1/test/1',{},config).then(...)
to login
POST /api.v1/users/auth
expects same json-format (userName, password) as register, returns same format.
Examples
php scaffold posts
Generates the following endpoints:
POST /api.v1/posts creates new post
GET /api.v1/posts returns multiple posts; accepts optional parameters (e.g. ?title=first)
GET /api.v1/posts/:id retrieves a post
PUT /api.v1/posts/:id updates a post
// e.g. axios const config = { headers: { Authorization: `Bearer ${token}` } }; const endpoint = "http://localhost:8080/api.v1/posts"; // create post axios.post(endpoint, { title: "my first post", content: "What a day!", gitHubLink: "https://github.com/sroehrl", author: "neoan" },config).then(res => { const post = res.data; // get all posts by neoan axios.get(endpoint + '?author=neoan',{},config).then(res => { const allPosts = res.data; }) })
The big picture
Instead of generating a pure test-api, the setup is meant to upcycle, meaning the structure is solid. You can build out actual database implementation while providing immediate usability.