Hướng dẫn simple rest api python - trăn api nghỉ ngơi đơn giản

Hướng dẫn simple rest api python - trăn api nghỉ ngơi đơn giản

Đã đăng vào thg 8 27, 2018 4:33 SA 2 phút đọc 2 phút đọc

Trong phạm vi bài viết, mình giả sử rằng các bạn đã có một sự hiểu biết cơ bản về Python cũng như thiết lập môi trường bằng virtualenv trước đó.

Nếu chưa thì tin chắc rằng trên Viblo có rất nhiều bài hướng dẫn thiết lập cũng như các kiến thức cơ bản về Python. Ở đây mình sẽ dùng phiên bản Python 2.7

1. Cài đặt Flask

Chúng ta chỉ việc cài đặt thêm 2 package này

pip install flask
pip install flask-sqlalchemy

Và tạo thư mục dự án

flask_app/
    my_app/
        - __init__.py
        product/
            - __init__.py      // Empty file
            - models.py
            - views.py
    - run.py
1

2. Ứng dụng Flask

Ở đây mình sẽ tạo ra một ứng dụng nhỏ, trong đó có một model Product. Cây thư mục của dự án sẽ có dạng

flask_app/
    my_app/
        - __init__.py
        product/
            - __init__.py      // Empty file
            - models.py
            - views.py
    - run.py

Tất nhiên đây chỉ là một bài viết tạo RESTful API đơn giản nên chúng ta sẽ kiểm tra bằng cách gọi http chứ không đụng chạm tới front-end

3. Code một tí nào

  • flask_app/my_app/init.pyinit.py
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
 
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)
 
from my_app.product.views import product
app.register_blueprint(product)
 
db.create_all()

File phía trên là file cấu hình và khởi tạo ứng dụng, ở đây chúng ta dùng sqlite cho nhanh gọn lẹ ha

Tiếp tục là file model

  • flask_app/my_app/product/models.py
from my_app import db
 
class Product(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(255))
    price = db.Column(db.Float(asdecimal=True))
 
    def __init__(self, name, price):
        self.name = name
        self.price = price
 
    def __repr__(self):
        return '<Product %d>' % self.id

Chắc không có gì phải giải thích nhỉ

Cuối cùng, chúng ta tạo 1 file có chức năng route, với Flask bạn không nhất thiết phải tạo hay config 1 file route chung, mà có thể đưa route vào một cách đơn giản như thế này thôi.

Có nhiều cách xử lý route với Flask, ở đây mình chọn dùng pluggable view cho nó trực quan và nếu bạn muốn phát triển thêm thắt front end vào thay vì chỉ là api với đống json thì cũng dễ dàng nữa.

  • flask_app/my_app/product/views.py
import json
from flask import request, jsonify, Blueprint, abort
from flask.views import MethodView
from my_app import db, app
from my_app.catalog.models import Product
 
product = Blueprint('product', __name__)
 
@product.route('/')
@product.route('/home')
def home():
    return "Welcome to the Product Home."
 
 
class ProductView(MethodView):
 
    def get(self, id=None, page=1):
        if not id:
            products = Product.query.paginate(page, 10).items
            res = {}
            for product in products:
                res[product.id] = {
                    'name': product.name,
                    'price': str(product.price),
                }
        else:
            product = Product.query.filter_by(id=id).first()
            if not product:
                abort(404)
            res = {
                'name': product.name,
                'price': str(product.price),
            }
        return jsonify(res)
 
    def post(self):
        name = request.form.get('name')
        price = request.form.get('price')
        product = Product(name, price)
        db.session.add(product)
        db.session.commit()
        return jsonify({product.id: {
            'name': product.name,
            'price': str(product.price),
        }})
 
    def put(self, id):
        # Update the record for the provided id
        # with the details provided.
        return
 
    def delete(self, id):
        # Delete the record for the provided id.
        return
 
 
product_view =  ProductView.as_view('product_view')
app.add_url_rule(
    '/product/', view_func=product_view, methods=['GET', 'POST']
)
app.add_url_rule(
    '/product/<int:id>', view_func=product_view, methods=['GET']
)

4. Chạy ngay đi

Chúng ta thêm cái này vào run.py

from my_app import app
app.run(debug=True)

Sau đó vào terminal và gõ lệnh là chạy thôi

python run.py

À, nếu bạn muốn test trên trình duyệt thì cổng mặc định của Flask là 5000 nhé.

Tư liệu tham khảo: https://code.tutsplus.com/tutorials/building-restful-apis-with-flask-diy--cms-26625

All rights reserved

Hướng dẫn simple rest api python - trăn api nghỉ ngơi đơn giản

Đã đăng vào thg 4 15, 2018 7:08 SA 4 phút đọc 4 phút đọc

Introduction

Việc xây dựng 1 API trong python là khá dễ dàng. Trong bài viết này, chúng ta sẽ cùng tạo ra một REST API đơn giản bằng python với sự hỗ trợ của Flask Framework.

REST API là gì?

Thiết kế REST hay RESTful API (State Representational State Transfer) được thiết kế để tận dụng các giao thức hiện có. Mặc dù REST có thể được sử dụng trên hầu hết các giao thức, nhưng thường sử dụng HTTP khi được sử dụng cho các API Web. Điều này có nghĩa là các nhà phát triển không cần cài đặt thư viện hoặc phần mềm bổ sung để tận dụng thiết kế REST API. Thiết kế API REST được định nghĩa bởi Tiến sĩ Roy Fielding trong luận án tiến sĩ năm 2000 của ông. Điều đáng chú ý là lớp linh hoạt không thể tin được của nó. Vì dữ liệu không gắn với các phương pháp và tài nguyên, REST có khả năng xử lý nhiều loại cuộc gọi, trả lại các định dạng dữ liệu khác nhau và thậm chí thay đổi cấu trúc với việc thực hiện đúng của hypermedia. Sự tự do và sự linh hoạt của nó trong thiết kế API REST cho phép bạn xây dựng một API đáp ứng nhu cầu của bạn đồng thời đáp ứng được nhu cầu của rất nhiều khách hàng khác nhau. Không giống như SOAP, REST không bị giới hạn bởi XML, mà có thể trả về XML, JSON, YAML hoặc bất kỳ định dạng nào tùy thuộc vào yêu cầu của khách hàng. Và không giống như RPC, người dùng không bắt buộc phải biết tên thủ tục hoặc các thông số cụ thể theo thứ tự cụ thể. Giờ để tạo một REST API đơn giản sử dụng python, chúng ta cần những thứ sau:
Sự tự do và sự linh hoạt của nó trong thiết kế API REST cho phép bạn xây dựng một API đáp ứng nhu cầu của bạn đồng thời đáp ứng được nhu cầu của rất nhiều khách hàng khác nhau. Không giống như SOAP, REST không bị giới hạn bởi XML, mà có thể trả về XML, JSON, YAML hoặc bất kỳ định dạng nào tùy thuộc vào yêu cầu của khách hàng. Và không giống như RPC, người dùng không bắt buộc phải biết tên thủ tục hoặc các thông số cụ thể theo thứ tự cụ thể.

Hướng dẫn simple rest api python - trăn api nghỉ ngơi đơn giản

Giờ để tạo một REST API đơn giản sử dụng python, chúng ta cần những thứ sau:

  • Python
  • Flask
  • Flask-SQLAlchemy
  • Flask-Restful
  • SQlite3
  • Jsonify

Nói thêm một chút, Flask là một micro framework viết bằng Python và dựa trên bộ công cụ Werkzeug và công cụ mẫu Jinja2. Còn Flask RESTful là một phần mở rộng cho Flask mà thêm hỗ trợ cho việc nhanh chóng xây dựng các API REST.

Bắt đầu thôi nào!

Bạn có thể tải tập dữ liệu Employees và Tracks Details Employees and Tracks Details và giải nén trong thư mục dự án có tên "python_rest". Tên cơ sở liệu là "chinook.db". Sau khi tải về, hãy tạo một tệp có tên là server.py trong thư mục python_rest. Tập tin này sẽ chứa các API Definitions và Flask Code.

$ python_rest ls
chinook.db server.py

Bây giờ, chúng ta tạo ra một môi trường ảo cơ bản cho Python2.7 và cài đặt các gói sau khi nó được kích hoạt.

$ virtualenv venv
$ source venv/bin/activate
$ pip install flask flask-jsonpify flask-sqlalchemy flask-restful
$ pip freeze

REST có 4 options:

  • GET
  • PUT
  • POST
  • DELETE

Trong bài viết này chúng ta sẽ làm việc với GET Trước khi code, chúng ta cần kiểm tra kết nối với cơ sở dữ liệu.

(.venv) python_rest$ sqlite3 chinook.db 
SQLite version 3.19.3 2017-06-08 14:26:16
Enter ".help" for usage hints.
sqlite> 

Bây giờ mọi thứ đã được thiết lập, chúng ta bắt đầu thao tác với cơ sở dữ liệu để lấy ra thông tin employees và tracks

flask_app/
    my_app/
        - __init__.py
        product/
            - __init__.py      // Empty file
            - models.py
            - views.py
    - run.py
0

Sẽ có 3 routes được tạo ra và đây là kết quả: http://127.0.0.1:5000/employees sẽ hiển thị tất cả id của employees trong cơ sở dữ liệu http://127.0.0.1:5000/tracks hiển thị các tracks detail http://127.0.0.1:5000/employees/2 hiển thị ra employees detail với id = 2
http://127.0.0.1:5000/employees sẽ hiển thị tất cả id của employees trong cơ sở dữ liệu

Hướng dẫn simple rest api python - trăn api nghỉ ngơi đơn giản
http://127.0.0.1:5000/tracks hiển thị các tracks detail
Hướng dẫn simple rest api python - trăn api nghỉ ngơi đơn giản
http://127.0.0.1:5000/employees/2 hiển thị ra employees detail với id = 2
Hướng dẫn simple rest api python - trăn api nghỉ ngơi đơn giản

Tổng kết

Vậy là xong, chúng ta đã tạo ra được 1 REST API đơn giản sử dụng python với Flask. Cũng không quá phức tạp phải không! Cảm ơn các bạn đã dành thời gian đọc bài viết của mình. Bạn cũng có thể tìm hiểu Flask và Flask RESTful ở đây http://flask.pocoo.org/ https://flask-restful.readthedocs.io/en/latest/
http://flask.pocoo.org/
https://flask-restful.readthedocs.io/en/latest/

Tài liệu tham khảo

https://www.codementor.io/sagaragarwal94/building-a-basic-restful-api-in-python-58k02xsiq

All rights reserved