Indonesian (Bahasa Indonesia) translation by Aditia Dwiperdana (you can also view the original English article)
Dalam bagian pertama seri tutorial tiga bagian ini, kita lihat bagaimana cara membuat RESTful API kita sendiri menggunakan Flask sebagai framework web. Pendekatan sebelumnya memberi kita banyak fleksibilitas tapi melibatkan menulis banyak kode yang seharusnya dihindari pada umumnya.
Pada bagian ini, kita akan gunakan ekstensi Flask, Flask-Restless, yang akan menghasilkan RESTful API untuk model database yang didefinisikan dengan SQLAlchemy. Saya akan gunakan contoh aplikasi yang sama seperti bagian sebelumnya dari seri ini untuk mempertahankan konteks.
Menginstall Dependencies
Karena melanjutkan dengan aplikasi yang kita buat di bagian pertama, kita hanya perlu menginstall satu dependency:
$ pip install Flask-Restless
Aplikasi
Flask-Restless
membuat menambahkan antarmuka RESTful API ke model yang dibuat dengan SQLAlchemy sangat mudah. Pertama, tambahkan REST APIManager
dari ekstensi flask.ext.restless
ke file konfigurasi aplikasi.
flask_app/my_app/__init__.py
from flask.ext.restless import APIManager manager = APIManager(app, flask_sqlalchemy_db=db)
Hanya dengan menambahkan beberapa baris kode di atas sudah cukup.
flask_app/my_app/catalog/views.py
File ini berisi sejumlah perubahan dari bagian sebelumnya. Berikut adalah file yang sudah ditulis kembali secara lengkap.
from flask import Blueprint from my_app import manager from my_app.catalog.models import Product catalog = Blueprint('catalog', __name__) @catalog.route('/') @catalog.route('/home') def home(): return "Welcome to the Catalog Home." manager.create_api(Product, methods=['GET', 'POST'])
Kode diatas harusnya cukup bisa menjelaskan dirinya sendiri. Kita baru saja mengimpor manager
yang dibuat di file sebelumnya, dan digunakan untuk membuat API untuk model Product
dengan methods
yang terdaftar. Kita bisa menambahkan fungsi lain seperti DELETE
, PUT
, PATCH
, dan lain-lain sesuai kebutuhan.
Aplikasi Beraksi
Kita uji aplikasi ini dengan membuat beberapa produk dan mendaftarnya. Titik akhir yang dibuat oleh ekstensi ini adalah http://localhost:5000/api/product
.
Seperti yang saya lakukan di bagian sebelumnya di seri tutorial ini, saya akan menguji menggunakan library requests
di terminal.
>>> import requests >>> import json >>> res = requests.get('http://127.0.0.1:5000/api/product') >>> res.json() {u'total_pages': 0, u'objects': [], u'num_results': 0, u'page': 1} >>> d = {'name': u'iPhone', 'price': 549.00} >>> res = requests.post('http://127.0.0.1:5000/api/product', data=json.dumps(d), headers={'Content-Type': 'application/json'}) >>> res.json() {u'price': 549.0, u'id': 1, u'name': u'iPhone'} >>> d = {'name': u'iPad', 'price': 649.00} >>> res = requests.post('http://127.0.0.1:5000/api/product', data=json.dumps(d), headers={'Content-Type': 'application/json'}) >>> res.json() {u'price': 649.0, u'id': 2, u'name': u'iPad'} >>> res = requests.get('http://127.0.0.1:5000/api/product') >>> res.json() {u'total_pages': 1, u'objects': [{u'price': 549.0, u'id': 1, u'name': u'iPhone'}, {u'price': 649.0, u'id': 2, u'name': u'iPad'}], u'num_results': 2, u'page': 1}
Cara untuk Menyesuaikan
Akan sangat menguntungkan memiliki RESTful API yang dibuat otomatis, tapi setiap aplikasi akan memiliki beberapa logika bisnis yang perlu penyesuaian, validasi, dan penanganan yang pintar/aman untuk menangani request sesuai kebutuhan.
Di sini, preprocessor
dan postprocessor
request akan membantu kita. Sesuai dengan namanya, fungsi yang ditunjuk sebagai preprocessor berjalan sebelum memproses sebuah request, dan fungsi yang ditunjuk sebagai postprocessor berjalan setelah request diproses. create_api()
adalah tempat untuk mendefinisikan fungsi-fungsi tersebut sebagai kamus untuk jenis request (GET
, POST
, dan lain-lain) dan fungsi yang bersangkutan sebagai list yang akan digunakan sebagai preprosesor atau postprosesor untuk request yang diinginkan. Di bawah ini adalah contoh kerangka:
manager.create_api( Product, methods=['GET', 'POST', 'DELETE'], preprocessors={ 'GET_SINGLE': ['a_preprocessor_for_single_get'], 'GET_MANY': ['another_preprocessor_for_many_get'], 'POST': ['a_preprocessor_for_post'] }, postprocessors={ 'DELETE': ['a_postprocessor_for_delete'] } )
Request GET
, PUT
, dan PATCH
memiliki fleksibilitas untuk dipanggil untuk satu atau beberapa record, maka masing-masing memiliki dua tipe. Pada kode di atas, perhatikan GET_SINGLE
dan GET_MANY
untuk request GET
.
Preprosesor dan postprosesor menerima banyak parameter berbeda untuk setiap jenis request dan bekerja tanpa mengembalikan nilai apapun. Ini disisakan untuk kamu coba sendiri.
Kesimpulan
Pada seri tutorial bagian kali ini, kita melihat bagaimana cara membuat RESTful API menggunakan Flask hanya dengan menambahkan beberapa baris kode ke model berbasis SQLAlchemy.
Pada bagian berikutnya yang merupakan bagian terakhir, saya akan membahas bagaimana cara membuat RESTful API menggunakan ekstensi Flask lain yang populer, tapi kali ini, API akan terpisah dari perangkat modeling yang digunakan untuk database.