1. Mis on JSON? (Põhiteadmised)
JSON-i ülevaade
JSON (JavaScript Object Notation) on andmevorming, mida kasutatakse sageli kliendi ja serveri vahelises suhtluses. See on kerge, loetav ja lihtsa struktuuriga, mistõttu kasutatakse seda laialdaselt veebirakendustes ja mobiilirakendustes. JSON on tekstipõhine formaat, mida saab hõlpsasti töödelda igas programmeerimiskeeles, muutes selle väga universaalseks.
JSON-i põhiline struktuur
JSON esitab andmeid võtme-väärtuse paaridena. Näiteks on olemas järgmine JSON-i struktuur:
{
"nimi": "Sato",
"vanus": 30,
"huvid": ["lugemine", "film"]
}
Selles näites on nimi
string, vanus
number ja huvid
massiiv. Tänu lihtsale struktuurile ja heale loetavusele on andmete vahetamine väga tõhus.
JSON-i eelised
- Kerge ja tõhus: Tekstipõhine formaat vähendab andmeedastuse mahtu ja vähendab seega võrgu koormust.
- Kõrge ühilduvus: Toetatud peaaegu kõigis programmeerimiskeeltes ja kasutatav mitmel platvormil.
- Lihtne töödelda: Andmete lugemine ja kirjutamine on lihtne, eriti API suhtluses.
2. JSON-i kasutamine Pythonis (põhialused)
Pythoni json
moodul
Pythonis saab json
mooduli abil hõlpsasti JSON-andmeid lugeda ja kirjutada. Näiteks saab JSON-andmed teisendada Pythoni sõnastikuks funktsiooni json.loads()
abil.
import json
json_data = '{"nimi": "Sato", "vanus": 30}'
python_obj = json.loads(json_data)
print(python_obj) # {'nimi': 'Sato', 'vanus': 30}
Vastupidises suunas saab Pythoni objektid JSON-vormingusse teisendada funktsiooni json.dumps()
abil.
python_obj = {"nimi": "Sato", "vanus": 30}
json_data = json.dumps(python_obj, ensure_ascii=False)
print(json_data) # {"nimi": "Sato", "vanus": 30}
Failide lugemine ja kirjutamine
JSON-andmeid saab lugeda failist või kirjutada faili.
# Lugemine failist
with open('data.json', 'r') as f:
data = json.load(f)
# Kirjutamine faili
with open('data.json', 'w') as f:
json.dump(python_obj, f, ensure_ascii=False)
3. JSON-i kasutamine API suhtluses (praktika)
API suhtlus requests
mooduliga
requests
mooduli abil saab JSON-andmeid API kaudu lihtsalt saata ja vastu võtta. Allpool on näide POST-päringust JSON-andmete saatmiseks ja vastuse saamiseks.
POST-päring JSON-andmete saatmiseks
import requests
url = 'https://example.com/api'
data = {'nimi': 'Sato', 'vanus': 30}
response = requests.post(url, json=data)
json_response = response.json()
print(json_response)
GET-päring JSON-andmete saamiseks
GET-päringuga saab API-st JSON-andmeid hõlpsasti kätte.
response = requests.get('https://example.com/api/user/1')
data = response.json()
print(data)

4. Vigade käitlemine ja parimad tavad
Vigade käitlemine API suhtluses
Kui API suhtluse käigus tekib viga, on oluline vigade käsitlemine. Järgmises näites püütakse kinni võrgu- ja ajalõpivead.
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)
Uuesti proovimine (Retry)
Kui võrk on ebastabiilne, on oluline rakendada uuesti proovimise loogikat. requests
moodul pakub selleks lihtsat lahendust Retry
klassiga.
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. JSON-i valideerimine
Valideerimine jsonschema
abil
API-st saadud JSON-andmete vastavust ootuspärasele struktuurile saab kontrollida jsonschema
teegi abil.
from jsonschema import validate, ValidationError
schema = {
"type": "object",
"properties": {
"nimi": {"type": "string"},
"vanus": {"type": "number"}
},
"required": ["nimi", "vanus"]
}
json_data = {"nimi": "Sato", "vanus": 30}
try:
validate(instance=json_data, schema=schema)
print("JSON is valid")
except ValidationError as e:
print("Validation Error:", e)
See töötab ka keerukamate skeemide ja pesastatud objektidega, võimaldades API-andmeid kindlalt valideerida.
6. Turvalisuse parimad tavad
API võtmete haldus
API võtmeid ei tohiks kõvakodeerida lähtekoodi sisse, vaid neid tuleks hallata keskkonnamuutujate kaudu. See vähendab turvariske.
import os
api_key = os.getenv('API_KEY')
Andmete sanitiseerimine
Enne kasutaja sisestatud andmete serverisse saatmist tuleks need sanitiseerida, et vältida SQL-süstimist ja XSS-ründeid.
from html import escape
safe_data = escape(user_input)