Requests merupakan librari standar yang digunakan untuk membuat request HTTP dengan python. Python Requests mengabstraksi kerumitan berbagai macam method request HTTP menjadi lebih sederhana dan mudah dimengerti.

Dalam tutorial ini Anda akan mempelajari apa saja hal-hal yang mempengaruhi performa librari Python Requests saat berada pada environment production, berikut ini 3 hal yang akan kita pelajari:

  1. Timeout
  2. Session Object
  3. Max Retries

Mengetahui tentang 3 hal diatas menjadi penting agar kita bisa mengetahui lebih jauh bagaimana performa librari tersebut saat menghadapi situasi yang crowded.

1) Requests Timeout

Saat Anda membuat request HTTP ke layanan eksternal, sistem Anda perlu menunggu respons sebelum melanjutkan ke proses berikutnya. Jika aplikasi Anda menunggu terlalu lama untuk respons tersebut, request ke service Anda dapat terganggu, atau bahkan terhenti.

Secara default, requests akan menunggu respons tanpa batas waktu, jadi Anda harus menentukan durasi waktu tunggu untuk mencegah hal ini terjadi. Untuk mengatur batas waktu request, gunakan timeout parameter. timeout dapat berupa bilangan bulat atau float yang mewakili jumlah detik untuk menunggu respons sebelum waktu habis:

>>> requests.get('https://api.github.com/', timeout=1).status_code
200
>>> requests.get('https://api.github.com/', timeout=3.05).status_code
200

Anda juga dapat menambahkan Tuple ke timeout dengan elemen pertama sebagai batas waktu koneksi (waktu yang memungkinkan klien untuk membuat koneksi ke server), dan yang kedua adalah batas waktu baca (waktu yang akan menunggu tanggapan setelah klien telah membuat koneksi ke server):

>>> print(requests.get('https://api.github.com/', timeout=(2,5)).status_code)
200

Jika request HTTP terhubung dalam waktu 2 detik dan menerima data dalam waktu 5 detik sejak koneksi dibuat, maka respons akan dikembalikan seperti sebelumnya. Jika waktu request HTTP habis, maka fungsi akan memunculkan Timeout pengecualian

import requests
from requests.exceptions import Timeout
 
try:
    response = requests.get('https://api.github.com', timeout=1)
    print(response.status_code)
except Timeout:
    print('The request timed out')

2) Requests Session Object

Ketika anda melakukan request HTTP dengan method get()dan post(). Fungsi-fungsi ini adalah abstraksi dari apa yang terjadi saat Anda membuat request HTTP. Mereka menyembunyikan detail implementasi seperti bagaimana koneksi dikelola, sehingga Anda tidak perlu memikirkan bagaimana proses itu terjadi.

Di bawah abstraksi itu ada kelas yang disebut Session. Jika Anda perlu menyempurnakan kontrol Anda atas request HTTP yang dibuat atau meningkatkan kinerja request HTTP, Anda mungkin perlu menggunakan Session instance secara langsung.

Sesi digunakan untuk mempertahankan parameter di seluruh request HTTP. Misalnya, jika Anda ingin menggunakan autentikasi yang sama di beberapa request HTTP, Anda dapat menggunakan sesi:

import requests
from getpass import getpass
 
with requests.Session() as session:
    session.auth = ('username', getpass())
    response = session.get('https://api.github.com/user')
 
print(response.headers)
print(response.json())

 

Setiap kali Anda membuat request HTTP dengan session, setelah diinisialisasi dengan kredensial autentikasi, kredensial akan dipertahankan.

3) Max Retries

Ketika request HTTP gagal, Anda mungkin ingin aplikasi Anda mencoba kembali request HTTP yang sama. Namun, librari requests tidak akan melakukan ini secara default. Untuk menerapkan fungsi ini, Anda perlu membuat Transport Adapter .

Transport Adapters memungkinkan Anda menentukan satu set konfigurasi per service yang berinteraksi dengan Anda.

Misalnya, katakanlah Anda ingin semua permintaan https://api.github.com mencoba lagi tiga kali sebelum akhirnya aplikasi Anda melakukan perintah exception ConnectionError. Anda perlu membuat Transport Adapter, mengatur max_retries parameternya, dan memasangnya ke Session :

import requests
from requests.adapters import HTTPAdapter
from requests.exceptions import ConnectionError
 
transport_adapter = HTTPAdapter(max_retries=3)
 
session = requests.Session()
session.mount('https://api.github.com',transport_adapter)
 
try:
    session.get('https://api.github.com')
except ConnectionError as ce:
    print(ce)

 

Sampai disini kita telah mempelajari bagaimana cara memaksimalkan penggunaan timeout, session dan max retries pada library requests, cara ini akan membuat aplikasi Anda semakin tangguh menghadapi situasi yang crowded

Baca artikel lainya:

 

sumber referensi : realpython.com, docs.python-requests.org