Langsung ke konten utama

Membuat REST API di Python dengan Falcon Framework dan Pony ORM

Pada kesempatan ini kita akan belajar membuat server REST API atau microservice sederhana menggunakan Falcon Framework, yaitu sebuah framework microservice di Python yang ringan dan cepat.

Falcon merupakan framework yang didesain khusus untuk membuat aplikasi REST API aras bawah, artinya tidak banyak banyak magic yang dibawanya, juga banyak hal mendasar yang perlu Anda ketahui tentang cara kerja protokol HTTP dan REST untuk bisa menggunakannya secara maksimal.

Karena itu pula, framework ini tidak banyak membawa fitur bawaan yang berimbas pada performance yang lebih gegas di banding framework REST API Python lainnya. Selain ramping beberapa kode internal framework ini sengaja di-compile sebagai cython, yaitu kode python yang berjalan secepat C. Beberapa benchmark yang menampilkan kecepatan Falcon dibanding framework-framework Python lainnya, bisa Anda lihat di Medium atau benchmark dengan framework dalam bahasa lainnya di TechEmpower.

Paket-Paket yang Dibutuhkan

Sebelum kita mulai ada beberapa paket Python yang Anda butuhkan dan bisa Anda install melalui pip, yaitu:
  1. Falcon
  2. Pony ORM
  3. Gunicorn - WSGI Server untuk menjalankan falcon app nanti
  4. Httpie - CURL replacement, tool untuk mengakses API melalui command line

Langkah-Langkah

Buatlah folder proyek sesuai keinginan Anda, dan akan lebih baik bila Anda membuat sebuah virtualenv di dalamnya, kemudian install kedua paket di atas.

$pip install falcon
$pip install pony
$pip install gunicorn
$pip install httpie


Selanjutnya buka editor favorit Anda dan mulailah menulis aplikasinya, seperti berikut.







Bila sudah selesai Anda bisa menjalankannya lewat console dengan perintah, yang kurang lebih akan tampak seperti ini:

xakiy@tumbleweed:~/falcon:>gunicorn --reload wsgi:app
[2019-10-28 01:49:04 +0800] [16297] [INFO] Starting gunicorn 19.7.1
[2019-10-28 01:49:04 +0800] [16297] [INFO] Listening at: http://127.0.0.1:8000 (16297)
[2019-10-28 01:49:04 +0800] [16297] [INFO] Using worker: sync
[2019-10-28 01:49:04 +0800] [16344] [INFO] Booting worker with pid: 16344

Dan kemudian mencoba untuk mengakses resource-nya, yaitu "/user", pertama-tama dengan methode GET.
Httpie sendiri ketika akan digunakan perintahnya adalah http, kemudian diikuti dengan argument-argument yang ingin kita kirimkan, seperti beberapa contoh berikut ini.


xakiy@tumbleweed:~/falcon:>http :8000/user
HTTP/1.1 404 Not Found
Connection: close
Date: Sun, 27 Oct 2019 18:20:06 GMT
Server: gunicorn/19.7.1
content-length: 60
content-type: application/json
vary: Accept

{
    "description": "Belum ada data!",
    "title": "404 Not Found"
}

Note: Secara default methode di Httpie adalah GET, jadi kita tidak perlu menuliskannya.
Karena belum ada data maka kita mendapat status 404. Selanjutnya kita mencoba untuk mengisi satu data User.


xakiy@tumbleweed:~/falcon:>http :8000/user nama='John' alamat='Surabaya'
HTTP/1.1 200 OK
Connection: close
Date: Sun, 27 Oct 2019 18:20:43 GMT
Server: gunicorn/19.7.1
content-length: 42
content-type: application/json

{
    "alamat": "Surabaya",
    "id": 1,
    "nama": "John"
}

Note: Untuk mengirim data dalam methode POST, kita hanya perlu menuliskannya dalam notasi key=value format, secara otomatis Httpie akan menggunakan methode POST di sana.
Nah, data bila data sudah terkirim maka akan langsung tersimpan. Selanjutnya mengubah data tadi dengan metode PATCH sesuai methode yang kita deklarasikan di berkas user.py tadi.



xakiy@tumbleweed:~/falcon:>http PATCH :8000/user nama='John Doe' alamat='Jakarta'
HTTP/1.1 400 Bad Request
Connection: close
Date: Sun, 27 Oct 2019 18:26:37 GMT
Server: gunicorn/19.7.1
content-length: 61
content-type: application/json
vary: Accept

{
    "description": "ID keliru!",
    "title": "400 Bad Request"
}

Ups, saya lupa untuk mengisi property id di sana, karena itu 400 yang muncul.
Kita coba dengan menambahkan id=1 sekarang.


xakiy@tumbleweed:~/falcon:>http PATCH :8000/user nama='John Doe' alamat='Jakarta' id=1
HTTP/1.1 200 OK
Connection: close
Date: Sun, 27 Oct 2019 18:26:47 GMT
Server: gunicorn/19.7.1
content-length: 43
content-type: application/json

{
    "alamat": "Jakarta",
    "id": 1,
    "nama": "John Doe"
}

Ok, itu saja, semoga bisa dengan mudah dipraktekkan dan dipahami.

Terima kasih, mungkin itu saja, saran dan komentar silahkan isi di kolom komentar.

Komentar