Quick & dirty api scaffolding as a result of a twitch.tv/neoan3 session
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
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.
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.
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.
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;
})
})
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.