Panduan Lengkap JSON di Python: Dasar, API, Validasi, dan Keamanan

1. Apa itu JSON? (Pengetahuan Dasar)

Gambaran Umum JSON

JSON (JavaScript Object Notation) adalah format data yang sering digunakan untuk komunikasi antara klien dan server. Karena ringan, mudah dibaca, dan memiliki struktur yang sederhana, JSON banyak digunakan dalam aplikasi web maupun aplikasi mobile. JSON berbentuk teks, sehingga dapat dengan mudah digunakan dalam bahasa pemrograman apa pun, menjadikannya sangat serbaguna.

Struktur Dasar JSON

JSON merepresentasikan data dalam pasangan kunci-nilai. Contohnya adalah struktur JSON berikut:

{
  "nama": "Sato",
  "usia": 30,
  "hobi": ["membaca", "film"]
}

Dalam contoh ini, nama adalah string, usia adalah angka, dan hobi adalah array. Karena strukturnya sederhana dan mudah dibaca, pertukaran data menjadi sangat efisien.

Keunggulan JSON

  1. Ringan dan efisien: Berformat teks, sehingga mengurangi beban jaringan karena ukuran data kecil.
  2. Kompatibilitas tinggi: Didukung hampir semua bahasa pemrograman, dapat digunakan lintas platform.
  3. Mudah di-parse: Membaca dan menulis data sederhana, sangat berguna terutama untuk komunikasi API.

2. Operasi JSON dengan Python (Dasar)

Modul json di Python

Di Python, modul json memungkinkan pembacaan dan penulisan data JSON dengan mudah. Misalnya, untuk mengubah data JSON menjadi dictionary Python, gunakan fungsi json.loads().

import json

json_data = '{"nama": "Sato", "usia": 30}'
python_obj = json.loads(json_data)

print(python_obj)  # {'nama': 'Sato', 'usia': 30}

Sebaliknya, untuk mengubah objek Python menjadi format JSON gunakan json.dumps().

python_obj = {"nama": "Sato", "usia": 30}
json_data = json.dumps(python_obj, ensure_ascii=False)

print(json_data)  # {"nama": "Sato", "usia": 30}

Membaca dan menulis file

Anda juga dapat membaca data JSON dari file atau menulis data ke file.

# Membaca dari file
with open('data.json', 'r') as f:
    data = json.load(f)

# Menulis ke file
with open('data.json', 'w') as f:
    json.dump(python_obj, f, ensure_ascii=False)
年収訴求

3. Komunikasi JSON dengan Python (Praktis)

Komunikasi API dengan modul requests

Dengan menggunakan modul requests, Anda dapat dengan mudah mengirim dan menerima data JSON melalui API. Berikut adalah contoh mengirim data JSON menggunakan POST request dan menerima responsenya.

Mengirim JSON dengan POST request

import requests

url = 'https://example.com/api'
data = {'nama': 'Sato', 'usia': 30}

response = requests.post(url, json=data)
json_response = response.json()

print(json_response)

Menerima JSON dengan GET request

Menggunakan GET request juga memungkinkan untuk mengambil data JSON dari API dengan mudah.

response = requests.get('https://example.com/api/user/1')
data = response.json()

print(data)

 

4. Penanganan Error dan Best Practice

Error handling dalam komunikasi API

Jika terjadi error saat komunikasi API, penting untuk menangani error dengan benar. Contoh berikut menangkap exception seperti error jaringan atau timeout.

try:
    response = requests.post(url, json=data)
    response.raise_for_status()
except requests.exceptions.HTTPError as errh:
    print("Http Error:", errh)
except requests.exceptions.ConnectionError as errc:
    print("Error Connecting:", errc)
except requests.exceptions.Timeout as errt:
    print("Timeout Error:", errt)
except requests.exceptions.RequestException as err:
    print("OOps: Something Else", err)

Proses retry

Jika jaringan tidak stabil, penting untuk menerapkan mekanisme retry. Dengan modul requests, Anda dapat mengimplementasikan retry menggunakan kelas Retry.

from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry

session = requests.Session()
retry = Retry(connect=3, backoff_factor=0.5)
adapter = HTTPAdapter(max_retries=retry)
session.mount('http://', adapter)
session.mount('https://', adapter)

response = session.get(url)
年収訴求

5. Validasi JSON

Validasi dengan jsonschema

Untuk memastikan data JSON dari API sesuai dengan format yang diharapkan, Anda dapat menggunakan library jsonschema untuk melakukan validasi.

from jsonschema import validate, ValidationError

schema = {
    "type": "object",
    "properties": {
        "nama": {"type": "string"},
        "usia": {"type": "number"}
    },
    "required": ["nama", "usia"]
}

json_data = {"nama": "Sato", "usia": 30}

try:
    validate(instance=json_data, schema=schema)
    print("JSON is valid")
except ValidationError as e:
    print("Validation Error:", e)

Mendukung skema yang kompleks maupun objek bersarang, sehingga data dari API dapat diverifikasi dengan pasti.

6. Best Practice Keamanan

Manajemen API key

Jangan hardcode API key di dalam source code. Sebaiknya simpan di environment variable untuk mengurangi risiko keamanan.

import os

api_key = os.getenv('API_KEY')

Sanitasi data

Sebelum mengirim data input dari pengguna ke server, lakukan proses sanitasi untuk melindungi dari serangan SQL Injection atau Cross-Site Scripting (XSS).

from html import escape

safe_data = escape(user_input)
侍エンジニア塾