Tạo một ứng dụng RESTful-API nhỏ bằng Flask để demo kiến trúc logic RESTful

Bước 1: Tạo virtual environment, cài vào các thư viện sau:

pip install flask
pip install flask-sqlachemy
pip install flask_restful
pip install flask_cors

Bước 2: Tạo cấu trúc website: HR application

    app.py
    settings.py
    config.ini
    dbconnect package
        __init__.py
    database folder
    users package
        users_model
        users_controller
        users_api
        users_view

    departments package
    ....

**Bước 3: ** Xây dựng cơ chế đọc/ghi database local (sqlite3) Đọc đường dẫn đến database HR_sqlite3.db trong settings.py

dbconnect/___ init __.py ```Python from flask_sqlalchemy import SQLAlchemy

database = SQLAlchemy()


>app.py
```Python
import settings
from dbconnect import database


app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + settings.DB_PATH
database.init_app(app)

Bước 4: Xây dựng prototype cho end-point: users_api End-point được design dưới dạng:

/hr-api/users/

/hr-api/users/

Bao gồm các function:

get_user

get_users

put_user

post_user

delete_user

Sử dụng Blueprint, Resouce của flask-restful để đăng ký và sử dụng API

users/users_endpoint.py

from flask import Blueprint, json, jsonify, request
from flask_restful import Resource, Api, reqparse

bp_users = Blueprint('users', __name__)
api_users = Api(bp_users)

class Users(Resource):
    def get(self, username):
        return jsonify({
            "status_code": 200,
            "text": username
        })

    def put(self, user_name):
        pass


    def delete(self, user_name):
        pass

class UsersList(Resource):
    def post(self):
        pass
    
    def get(self, user_name):
       pass


api_users.add_resource(Users, '/users/<username>')
api_users.add_resource(UsersList, '/users/')

app.py

from flask import Flask
from flask_restful import Api
# from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
import settings
from dbconnect import database
from users.users_endpoint import bp_users

app = Flask(__name__)
api = Api(app)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///" + settings.DB_PATH
database.init_app(app)

cors = CORS(app, resources={r"/hr-api/*": {"origins": "*"}})

app.register_blueprint(bp_users, url_prefix="/hr-api")

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == "__main__":
    app.run(debug=True, port=5008)


**Thử nghiệm: ** Từ hr-even, thực hiện bật webiste:

python app.py

Thực hiện get dữ liệu:

http://127.0.0.1:5008/hr-api/users/username

Kết quả trả về:

{
  "status_code": 200, 
  "text": "username"
}

sample source code: flask-contacts-rest-api