oof1lab
8ee094a577
|
7 years ago | |
---|---|---|
bin | 7 years ago | |
lib | 7 years ago | |
tests | 7 years ago | |
.eslintrc | 7 years ago | |
.gitignore | 7 years ago | |
.travis.yml | 7 years ago | |
LICENSE | 7 years ago | |
README.md | 7 years ago | |
index.js | 7 years ago | |
package-lock.json | 7 years ago | |
package.json | 7 years ago |
README.md
xmysql: one command to generate REST APIs for any MySql database
Why this ?
Generating REST APIs quickly for a MySql database which does not follow conventions of frameworks such as rails, django etc is a small adventure that one rather like to avoid ..
Hence this.
Powered by node packages : (express, mysql) => { xmysql }
Setup and Usage
npm install -g xmysql
xmysql -h localhost -u mysqlUsername -p mysqlPassword -d databaseName
http://localhost:3000
That's it!
Features
- Generates API for ANY MySql database
- Serves APIs irrespective of naming conventions of primary keys, foreign keys, tables etc
- CRUD : Usual suspects
- Support for composite primary keys
- Pagination
- Sorting
- Fields
- Group By
- Group By, Order By
- Relations
- Run dynamic queries
Use HTTP clients like Postman or similar tools to invoke REST API calls
Download node, mysql (setup mysql), sample database - if you haven't on your system.
Root URL
Root URL (localhost:3000/) returns all REST API urls for each table in schema.
CRUD APIs Usual Suspects
- GET /api/tableName
- POST /api/tableName
- GET /api/tableName/:id
- PUT /api/tableName/:id
- GET /api/tableName/count
- GET /api/tableName/exists
- GET /api/parentTable/:id/childTable
- DELETE /api/tableName/:id
- POST /dynamic
Other APIS
- GET /api/tableName/describe
- GET /api/tables
Support for composite primary keys
___ (three underscores)
/api/payments/103___JM555205
___ : If there are multiple primary keys - seperate them by three underscores as shown
Pagination
_p & _size
_p indicates page and _size indicates size of response rows
By default 20 records and max of 100 are returned per GET request on a table.
/api/payments?_size=50
/api/payments?_p=2
/api/payments?_p=2&_size=50
Order by / Sorting
ASC
/api/payments?_sort=column1
eg: sorts ascending by column1
DESC
/api/payments?_sort=-column1
eg: sorts descending by column1
Multiple fields in sort
/api/payments?_sort=column1,-column2
eg: sorts ascending by column1 and descending by column2
Fields
/api/payments?_fields=customerNumber,checkNumber
eg: gets only customerNumber and checkNumber in response of each record
/api/payments?_fields=-checkNumber
eg: gets all fields in table row but not checkNumber
Group By
/api/offices/groupby?_fields=country
eg: SELECT country,count(*) FROM offices GROUP BY country
/api/offices/groupby?_fields=country,city
eg: SELECT country,city,count(*) FROM offices GROUP BY country,city
Group By, Order By
/api/offices/groupby?_fields=country,city&sort=city
eg: SELECT country,city,count(*) FROM offices GROUP BY country,city ORDER BY city ASC
/api/offices/groupby?_fields=country,city&sort=city,country
eg: SELECT country,city,count(*) FROM offices GROUP BY country,city ORDER BY city ASC, country ASC
/api/offices/groupby?_fields=country,city&sort=city,-country
eg: SELECT country,city,count(*) FROM offices GROUP BY country,city ORDER BY city ASC, country DESC
Run dynamic queries
Dynamic queries on a database can be run by POST method to URL localhost:3000/dynamic
This is enabled only when using local mysql server i.e -h localhost or -h 127.0.0.1 option.
Post body takes two fields : query and params.
query: SQL query or SQL prepared query (ones with ?? and ?)
params : parameters for SQL prepared query
POST /dynamic
{
"query": "select * from ?? limit 1,20",
"params": ["customers"]
}
Relational Tables
xmysql identifies foreign key relations automatically and provides GET api.
/api/customers/103/payments
eg: Customers is parent table and payments is child table. API invocation will result in all payments with customer 103.
When to use ?
- You need just REST APIs without much hassle for (ANY) MySql database.
- You are learning new frontend frameworks and need REST APIs for your MySql database.
- You are working on a demo, hacks etc
When NOT to use ?
- If you are in need of a full blown MVC framework, ACL, Authorisation etc - Not this.
- Other times not mentioned in when to use section