sroehrl/scaffold-api

the efficient PHP framework

v1.0.3 2020-07-27 15:41 UTC

This package is auto-updated.

Last update: 2024-04-11 06:38:21 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.

  1. composer create-project sroehrl/scaffold-api
  2. 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.