Apa itu REST API

Berbicara dari jarak jauh, REST API diperlukan untuk membuat situs web. Tapi bagaimanapun, ini membutuhkan banyak hal (Anda katakan) - di bagian mana dari REST API?



Frontend dan Backend



Mari kita mulai secara berurutan. Apa itu frontend dan backend? Situs ini memiliki dua sisi: depan dan dalam, masing-masing. Yang pertama biasanya bertanggung jawab atas penataan visual objek pada halaman (di mana gambarnya, di mana teksnya, dan di mana tombolnya). Yang kedua bertanggung jawab atas "tindakan". Biasanya ini adalah klik pada tombol yang sama atau "hal" lain di situs. Misalnya, Anda pergi ke halaman jejaring sosial favorit Anda dan pertama-tama Anda harus masuk ke akun Anda. Di sisi depan (frontend) Anda memasukkan nama pengguna dan kata sandi Anda dan klik tombol "Login". Saat ini, permintaan dikirim ke database untuk memeriksa keberadaan pengguna tersebut, dan jika berhasil, Anda akan dibawa ke jejaring sosial di bawah akun Anda, jika tidak, Anda akan melihat pesan kesalahan. Dalam hal ini, backend pada dasarnya bertanggung jawab untuk mengirim permintaan ke database.Biasanya dibagi menjadi tiga sub-bagian:



  1. API Web untuk menerima permintaan
  2. Logika bisnis untuk memproses permintaan
  3. Interaksi dengan database


Pada artikel ini, kita akan berbicara terutama tentang API atau Antarmuka Pemrograman Aplikasi dan sedikit tentang logika bisnis. Tapi pertama-tama, mari buat server.



Membuat server Anda sendiri



Beginilah tampilan aplikasi server python yang paling sederhana menggunakan kerangka kerja flask:



from flask import Flask

app = Flask(__name__)

@app.route("/")

def index():

   return "Hello, World!"

app.run()


Sudah ada satu rute kosong (β€œ/”) dan jika Anda menjalankan aplikasi ini dan membuka browser di halaman 127.0.0.1 : 5000, Anda akan melihat tulisan β€œHalo, Dunia!”. Dari sisi server, Anda akan melihat pesan berikut:



127.0.0.1 - - [07 / Aug / 2020 20:32:16] "GET / HTTP / 1.1" 200 - Jadi, dengan membuka tautan ini di browser (klien), kami melakukannya Permintaan GET ke server kami dan kami masuk ke fungsi indeks - dari sini "Hello, World!" Diambil. Anda dapat menambahkan kueri lain (jauh lebih kompleks) di sepanjang rute lain (atau belum tentu). Seperti yang saya katakan, dalam kasus ini, kami menggunakan permintaan GET - default standar. Tetapi masih banyak lainnya, yang paling populer adalah POST, PUT, HAPUS. Tetapi mengapa ini perlu?



Buat Baca Perbarui Hapus



Pertama, REST adalah singkatan dari REpresentational State Transfer (atau, dalam cara yang lebih sederhana, REpresentational State Transfer). Faktanya, definisi REST itu sendiri tidak begitu penting, tetapi biasanya dikaitkan dengan akronim lain - CRUD - Buat Baca Pembaruan Hapus. Di awal, saya memberikan contoh terkait dengan database dan keempat operasi ini merupakan bagian integral dari bekerja dengannya (baik, atau hanya dengan data).



Kedua, REST atau RESTfull API harus mendukung penanganan empat tindakan ini. Di sinilah metode GET, POST, PUT, DELETE berguna. Sebagai aturan (belum tentu!) Metode POST digunakan untuk menambahkan data baru (Buat), GET - untuk membaca (Baca), PUT - untuk memperbarui data yang ada (Perbarui) dan DELETE, masing-masing, untuk menghapus (Hapus). Misalnya, aplikasi labu yang sama dapat didesain ulang seperti ini:



from flask import Flask, request

app = Flask(__name__)

@app.route("/", methods=["POST", "GET", "PUT", "DELETE"])

def index():

   if request.method == "POST":

       #   

   if request.method == "GET":

       #  

   if request.method == "PUT":

       #  

   if request.method == "DELETE":

       #  

app.run()


Ini adalah REST API primitif. Sisi frontend sekarang dapat mengirim permintaan dan, tergantung pada tipenya, kami akan mengambil tindakan lebih lanjut.



Bekerja dengan data



Aplikasi kita saat ini sama sekali tidak menarik - alangkah baiknya bekerja dengan beberapa data. Untuk melakukan ini, Anda perlu memikirkan cara mentransfernya. Cara yang paling populer adalah format JSON (tetapi Anda dapat menggunakan yang lain, misalnya XML). Ini dianalogikan dengan kamus di python dan sangat mudah digunakan. Saya akan menggunakan data primitif untuk contoh dengan otorisasi di jejaring sosial:



data = {

   1: {

       "login": "login1",

       "password": "Qwerty1"},

   2: {

       "login": "login2",

       "password": "Ytrewq2"}

   }


Kami memiliki data di mana ada dua pengguna sejauh ini (login1 dan login2) dan kami akan CRUD tanggal ini. Harus dikatakan bahwa keempat metode jarang bekerja pada rute yang sama dan biasanya melakukan ini: untuk metode GET (mengembalikan semua pengguna) dan POST, rute digunakan, misalnya, "/ pengguna", dan untuk metode GET (berikan satu pengguna dengan ID-nya), PUT dan HAPUS "/ users / id". Perlu juga dicatat bahwa untuk memperbarui dan membuat pengguna baru, kami menerima data tentang mereka di badan permintaan (request.json). Sekarang program kami dapat ditulis ulang sebagai berikut:



from flask import Flask, request

app = Flask(__name__)

data = {

   1: {

       "login": "login1",

       "password": "Qwerty1"},

   2: {

       "login": "login2",

       "password": "Ytrewq2"}

   }

@app.route("/users", methods=["POST", "GET"])

def work_with_users():

   if request.method == "POST":

       data[max(data.keys())+1] = request.json

       return {"message": "User was created"}, 201

   if request.method == "GET":

       return data, 200

@app.route("/users/<int:user_id>", methods=["GET", "PUT", "DELETE"])

def work_with_user_by_id(user_id):

   if request.method == "GET":

       return data[user_id], 200

   if request.method == "PUT":

       data[user_id]["login"] = request.json["login"]

       data[user_id]["password"] = request.json["password"]

       return {"message": "User was updated"}, 200

   if request.method == "DELETE":

       data.pop(user_id)

       return {"message": "User was deleted"}, 200

app.run()


Ada banyak program untuk menguji permintaan (Postman, Fiddler, Insomnia ...) dan saya sarankan Anda membiasakan diri dengan salah satunya (secara pribadi, Postman adalah favorit saya). Dengan bantuan mereka, Anda dapat melihat apa yang muncul sebagai hasil dari permintaan dan dengan kode status apa (nomor 200/201 sebagai gantinya). Dan Anda juga dapat tahap pengiriman data dengan menambahkannya ke badan permintaan.



Perlu juga dicatat bahwa pendekatan ini saat ini tidak digunakan, dan library flask-restplus (atau flask-restx, yang menggantikannya) biasanya digunakan, tetapi saya pikir pertama-tama Anda perlu mengenal flask murni. Juga perlu untuk memeriksa ketersediaan data dan kebenarannya dan memberikan pengembalian kesalahan dalam kasus yang berlawanan.



Kesimpulan



REST API hanyalah metode CRUD yang diakses oleh sisi klien situs di sepanjang rute tertentu. Secara teliti, ini mungkin sulit untuk dipahami, jadi saya sarankan untuk menulis server Anda sendiri dengan analogi dengan contoh. Secara pribadi, saya menemukan flask salah satu kerangka kerja termudah untuk ini, dan jika Anda seorang pemula, maka saya menyarankan Anda untuk mencobanya.



All Articles