Python: REST API kūrimas
Žingsnis po žingsnio vadovas, kaip sukurti REST API naudojant Flask su Python
👋 Sveiki atvykę į Stackhero dokumentaciją!
Stackhero siūlo paruoštą naudoti Python cloud sprendimą, sukurtą tam, kad jūsų diegimo procesas būtų kuo paprastesnis:
- Diekite savo aplikaciją į gamybinę aplinką per kelias sekundes su paprastu
git push.- Naudokite savo pasirinktą domeno vardą, su automatiniu HTTPS sertifikato konfigūravimu – saugūs ryšiai bus užtikrinti automatiškai.
- Pasikliaukite automatinėmis atsarginėmis kopijomis, atnaujinimais vienu paspaudimu ir prognozuojama kainodara, kad galėtumėte susitelkti į savo kodą, o ne infrastruktūros valdymą.
- Naudokitės aukštu našumu ir saugumu privačioje, dedikuotoje infrastruktūroje. Jūsų aplinka yra izoliuota ir apsaugota.
Taupykite laiką ir supaprastinkite savo darbo eigą: jūsų kodas gali veikti Stackhero Python cloud hosting platformoje vos per 5 minutes.
Šiame vadove parodysime, kaip sukurti paprastą REST API naudojant Python ir Flask. Flask yra lengvas mikro-framework, leidžiantis greitai kurti žiniatinklio aplikacijas ir API.
Būtinos sąlygos
Prieš pradėdami įsitikinkite, kad turite įdiegtus šiuos įrankius:
- Python
- pip
- git
- asdf
Jei reikia pagalbos aplinkos paruošimui, peržiūrėkite Development platform vadovą. Taip pat galite iš karto pradėti programuoti su internetine Code-Hero platforma. Code-Hero suteikia internetinę IDE ir terminalą su visais reikalingais įrankiais jau įdiegtais, todėl galite susitelkti į kodą, o ne į diegimą ir konfigūravimą.
Python REST API veikia Code-Hero, pasiekiama tiesiai iš naršyklės
Naujo projekto kūrimas
Pradėkite sukurdami naują projekto katalogą. Šiame pavyzdyje projektas vadinasi myRestApi:
mkdir myRestApi
cd myRestApi
Nustatykite naujausią Python versiją su asdf ir inicializuokite Git repozitoriją:
asdf install python latest \
&& asdf local python latest
echo "__pycache__/" >> .gitignore
git init
git add -A .
git commit -m "First commit"
Flask priklausomybės diegimas
Šiam pavyzdžiui reikia tik vienos pagrindinės priklausomybės – Flask.
Flask sukurtas taip, kad būtų paprastas ir greitas, todėl galite kurti ir diegti žiniatinklio API be papildomų sudėtingumų. Jis turi įdiegtą maršrutizavimą, šablonų palaikymą ir HTTP užklausų apdorojimą, todėl nuo idėjos iki veikiančios API galite pereiti per kelias minutes.
Flask ir python-dotenv galite įdiegti su pip:
pip install Flask python-dotenv
Įtraukiame
python-dotenv, kad patogiai ir saugiai valdytumėte aplinkos kintamuosius. Kaip jį naudoti, pamatysite vėlesniuose žingsniuose.
Po diegimo užfiksuokite priklausomybes į requirements.txt failą:
pip freeze > requirements.txt
Priklausomybių užfiksavimas užtikrina, kad visi naudos tas pačias paketų versijas. Šis mažas žingsnis gali sutaupyti daug laiko ieškant problemų ateityje.
REST API įgyvendinimas su Flask
Dabar galite rašyti savo API kodą.
Sukurkite failą app.py ir įdėkite šį kodą:
import os
from dotenv import load_dotenv
from flask import Flask, jsonify, request
# Įkelti aplinkos kintamuosius iš .env ne gamybinėje aplinkoje
if os.environ.get('ENV') != 'production':
load_dotenv()
app = Flask(__name__)
# Pavyzdiniai užduočių duomenys
tasks = [
{
'id': 1,
'title': 'Buy groceries',
'description': 'Milk, Cheese, Pizza, Fruits',
'done': False
},
{
'id': 2,
'title': 'Learn Python',
'description': 'Learn Python programming basics',
'done': False
}
]
@app.route('/api/tasks', methods=['GET'])
def get_tasks():
return jsonify({'tasks': tasks})
@app.route('/api/tasks/<int:task_id>', methods=['GET'])
def get_task(task_id):
task = [task for task in tasks if task['id'] == task_id]
if not task:
return jsonify({'error': 'Task not found'}), 404
return jsonify({'task': task[0]})
@app.route('/api/tasks', methods=['POST'])
def create_task():
if not request.json or 'title' not in request.json:
return jsonify({'error': 'Title is required'}), 400
task = {
'id': tasks[-1]['id'] + 1,
'title': request.json['title'],
'description': request.json.get('description', ""),
'done': False
}
tasks.append(task)
return jsonify({'task': task}), 201
if __name__ == '__main__':
if os.environ.get('ENV') == 'production':
app.run()
else:
app.run(host='0.0.0.0', port=8080, debug=True)
Serverį galite paleisti su:
python app.py
Naudojant
host='0.0.0.0', jūsų API bus pasiekiama per naršyklę naudojant Code-Hero. Apsilankykitehttp://<XXXXXX>.stackhero-network.com:8080/api/tasks, kur<XXXXXX>pakeiskite savo Code-Hero domenu.
REST API testavimas
Kai serveris veikia, su API galite bendrauti naudodami cURL. Štai keli pavyzdiniai komandų variantai:
-
Gauti visas užduotis:
curl -s http://localhost:8080/api/tasks # Output: # { # "tasks": [ # ... # ] # } -
Gauti konkrečią užduotį (ID 2):
curl -s http://localhost:8080/api/tasks/2 # Output: # { # "task": { # ... # } # } -
Sukurti naują užduotį:
curl -s -X POST -H "Content-Type: application/json" \ -d '{"title": "New task", "description": "Created with cURL"}' \ http://localhost:8080/api/tasks # Output: # { # "task": { # ... # } # }
Patarimas: Kad rezultatas būtų aiškesnis, galite jį perduoti į
jq. Pavyzdžiui,curl -s http://localhost:8080/api/tasks/2 | jqpadaro JSON lengviau skaitomą.
Python REST API pavyzdys su Flask, veikiantis Stackhero Code-Hero, su serveriu (1) ir klientu naudojant cURL (2)
Aplinkos kintamųjų valdymas
Aplinkos kintamieji padeda apsaugoti slaptus duomenis, tokius kaip duomenų bazės slaptažodžiai ar API raktai. Jų naudojimas leidžia laikyti jautrią informaciją atskirai nuo kodo ir Git istorijos, taip pat lengvai keisti nustatymus skirtingose aplinkose.
Aplinkos kintamiesiems valdyti galite naudoti python-dotenv modulį. Jei praleidote ankstesnį diegimo žingsnį, įdiekite jį dabar:
pip install python-dotenv
pip freeze > requirements.txt
Sukurkite .env failą projekto šaknyje ir įrašykite savo vystymo aplinkos kintamuosius:
ENV="development"
DATABASE_PASSWORD="secretPassword"
THIRD_API_PRIVATE_KEY="secretKey"
Pridėkite .env į .gitignore, kad jis nebūtų įtrauktas į Git:
echo ".env" >> .gitignore
Šiuos kintamuosius Python galite pasiekti naudodami os.environ.get():
import os
print(os.environ.get('ENV'))
.envfailas skirtas tik vystymui. Gamyboje ar staging aplinkoje aplinkos kintamuosius galite nustatyti tiesiogiai Stackhero valdymo pulte, Python paslaugos konfigūracijoje.
Python ir Flask paruošimas gamybinei aplinkai
Flask vidinis serveris puikiai tinka vystymui. Gamyboje rekomenduojama naudoti patikimą WSGI serverį, pvz., Gunicorn. Štai kaip pasiruošti:
-
Įdiekite Gunicorn:
pip install gunicorn pip freeze > requirements.txt -
Paleiskite aplikaciją su Gunicorn:
ENV=production gunicorn app:app \ --error-logfile - \ -b 0.0.0.0:8080Čia
app:appreiškia jūsų failą (app.py) ir Flask aplikacijos instanciją (app). -
Galite pridėti
Makefile, kad lengvai perjungtumėte vystymo ir gamybos režimus:.DEFAULT_GOAL := dev # Stackhero for Python pagal nutylėjimą vykdo "run" taisyklę. Perrašome ją, kad vykdytų 'prod'. run: prod prod: ENV=production gunicorn app:app \ --error-logfile - \ -b 0.0.0.0:8080 dev: python app.py
Serverį galite paleisti vystymo režimu su make dev (arba tiesiog make), arba gamybos režimu su make prod.
Python kodo diegimas į gamybą
Stackhero supaprastina ir užtikrina debesijos diegimą. Savo Python projektą galite diegti naudodami Python cloud hosting paslaugą. Funkcionalumas apima:
- Diegimas vienu
git push - Automatinis TLS (HTTPS) su pritaikomais domenais
- Dedikuota infrastruktūra saugumui
- HTTP/2, TLS 1.3, WebSockets, GZIP & Brotli, ETag ir TCP/UDP prievadų palaikymas
"Stackhero for Python" paslaugos konfigūravimas
Diegimui atlikite šiuos žingsnius:
-
Gaukite savo viešą SSH raktą:
cat ~/.ssh/id_*.pub -
Stackhero valdymo pulte atidarykite savo "Stackhero for Python" paslaugą ir pasirinkite "Configure".
-
Įklijuokite viešą raktą į "SSH public keys" arba "Key" lauką.
-
Spauskite "Validate", kad patvirtintumėte konfigūraciją.
"Stackhero for Python" viešo rakto konfigūracija
Jei dar neturite SSH raktų, galite juos sugeneruoti su:
ssh-keygen -t ed25519
Pridėkite Git nuotolinį adresą prie projekto naudodami komandą iš Stackhero paslaugos (pakeiskite <XXXXXX> savo paslaugos domenu):
git remote add stackhero ssh://stackhero@<XXXXXX>.stackhero-network.com:222/project.git
Git remote komanda
Diegimas į gamybą
Kai būsite pasiruošę diegti, išsiųskite kodą su:
git push stackhero main
Prieš diegdami nepamirškite įrašyti pakeitimų (commit). Stackhero Code-Hero aplinkoje galite naudoti Command Palette (
Ctrl+Shift+ParbaCmd+Shift+P) ir įvestiGit: Commitgreitam commit'ui.
Po diegimo jūsų API bus pasiekiama adresu https://<XXXXXX>.stackhero-network.com/api/tasks. Pakeiskite <XXXXXX> savo paslaugos domenu, kad pasiektumėte Flask API.
Išvada
Dabar turite veikiančią REST API, sukurtą su Flask. Turėdami šį pagrindą, lengvai galite plėsti aplikaciją, prijungti duomenų bazes ar integruoti su kitomis paslaugomis. Flask suteikia lankstumą augti nuo paprasto prototipo iki pilnai veikiančios gamybinės API.