Hoe maak je een REST API met Flask op Ubuntu

Inleiding

In deze handleiding leer je hoe je een eenvoudige REST API kunt maken met behulp van Flask, een lichtgewicht Python web framework. We zullen de basis delen over het opzetten van een Flask-toepassing, het definiëren van routes, het afhandelen van verzoeken en het teruggeven van JSON-responses. Na het voltooien van deze handleiding zult u een werkende API hebben die u kunt verder ontwikkelen en integreren met andere toepassingen.

Vereisten

  • Een server die Ubuntu draait en een niet-rootgebruiker met sudo-rechten en een actieve brandmuur. Voor instructies over hoe u dit kunt instellen, kies uw distributie van deze lijst en volg onze handleiding voor de initiale serverinstellingen. Zorg ervoor dat u met een ondersteunde versie van Ubuntu werkt.

  • Vertrouwdheid met de Linux-opdrachtprompt. Voor een introductie of herinnering aan de opdrachtprompt kun je deze gids bezoeken over Linux command line primer

  • Een basiskennis van Python-programmeren.

  • Python 3.7 of nieuwer geïnstalleerd op je Ubuntu-systeem. Om te leren hoe je een Python-script op Ubuntu uitvoert, kun je onze handleiding raadplegen over Hoe je een Python-script op Ubuntu uitvoert.

Stap 1 — Uw Flask-omgeving instellen

Ubuntu 24.04 bevat Python 3 standaard. Open het terminal en voer het volgende commando uit om de installatie van Python 3 twee keer te controleren:

root@ubuntu:~# python3 --version
Python 3.12.3

Als Python 3 reeds geïnstalleerd is op uw machine, zal het bovenstaande commando de huidige versie van de Python 3-installatie teruggeven. In het geval dat het niet geïnstalleerd is, kunt u het volgende commando uitvoeren om de Python 3-installatie te krijgen:

root@ubuntu:~# sudo apt install python3

Vervolgens moet u de pakketinstallerer pip op uw systeem installeren:

root@ubuntu:~# sudo apt install python3-pip

Nadat pip is geïnstalleerd, kunnen we Flask installeren.

U zal Flask via pip installeren. Het is aanbevolen om dit in een virtuele omgeving te doen om conflicten te vermijden met andere pakketten op uw systeem.

root@ubuntu:~# python3 -m venv mijnprojectenv
root@ubuntu:~# source mijnprojectenv/bin/activate
root@ubuntu:~# pip install Flask

Stap 2 – Maak een Flask-toepassing

De volgende stap is het schrijven van de Python-code voor de Flask-toepassing. Om een nieuw script te maken, navigeer naar uw keuze directory:

root@ubuntu:~# cd ~/pad-naar-uw-script-directory

Als u binnen de map bent, maak een nieuw Python-bestand, app.py, en importeer Flask. Vervolgens initialiseer u een Flask-toepassing en maak een basisroute.

root@ubuntu:~# nano app.py

Dit zal een lege tekstbewerker openen. Schrijf uw logica hier of kopieer het volgende code:

app.py
from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/')
def hello_world():
    return jsonify(message="Hello, World!")

# In-memory data store
items = [{"id": 1, "name": "This is item 1"}, {"id": 2, "name": "This is item 2"}]

Stap 4 — Creëer RESTful routes

In dit gedeelte zullen we routes in onze Flask-toepassing definiëren die overeenkomen met de verschillende acties die een gebruiker kan uitvoeren op de API. Elke route zal een specifieke HTTP-methode afhandelen.

GET, POST, PUT, en DELETE. Deze methoden zijn gelijk aan de vier basisoperaties van persistentieberging—vaak aangeduid als CRUD (Create, Read, Update, Delete).

Voeg de volgende routes toe aan uw app.py python script:

app.py
from flask import Flask, jsonify, request

app = Flask(__name__)

@app.route('/')
def hello_world():
    return jsonify(message="Hello, World!")

# In-memory data store
items = [{"id": 1, "name": "This is item 1"}, {"id": 2, "name": "This is item 2"}]

# GET request: Retrieve all items
@app.route('/api/items', methods=['GET'])
def get_items():
    return jsonify(items)

# GET request: Retrieve a specific item by ID
@app.route('/api/items/<int:item_id>', methods=['GET'])
def get_item(item_id):
    item = next((item for item in items if item["id"] == item_id), None)
    if item is None:
        return jsonify({"error": "Item not found"}), 404
    return jsonify(item)

# POST request: Create a new item
@app.route('/api/items', methods=['POST'])
def create_item():
    new_item = {"id": len(items) + 1, "name": request.json.get('name')}
    items.append(new_item)
    return jsonify(new_item), 201

# PUT request: Update an existing item
@app.route('/api/items/<int:item_id>', methods=['PUT'])
def update_item(item_id):
    item = next((item for item in items if item["id"] == item_id), None)
    if item is None:
        return jsonify({"error": "Item not found"}), 404
    item['name'] = request.json.get('name', item['name'])
    return jsonify(item)

# DELETE request: Delete an item
@app.route('/api/items/<int:item_id>', methods=['DELETE'])
def delete_item(item_id):
    global items
    items = [item for item in items if item["id"] != item_id]
    return '', 204

if __name__ == "__main__":
    app.run(debug=True)

Laten we meer kennen wat elke functie doet:

  • Flask Imports: Het code importeert nodige componenten van Flask: Flask, jsonify, en request.

  • In-Memory Data Store: items is een eenvoudige lijst van dictionaries die als tijdelijke datastore voor de API fungeert. Elk item heeft een id en een name.

  • GET /api/items

    : Wanneer een GET-verzoek wordt gedaan naar /api/items, stuurt de server een lijst terug met alle items uit de items gegevensbank. Dit is handig voor het ophalen van alle bronnen in een verzameling.

  • POST /api/items: Een POST-verzoek naar /api/items laat de cliënt een nieuw item aanmaken. De server verwacht een JSON-object dat de details van het nieuwe item bevat in het verzoeksobject. Na het aanmaken van het item reageert de server met het nieuw aangemaakte item en een 201 Created-statuscode.

  • PUT /api/items/<int:item_id>: Een PUT-verzoek naar /api/items/<item_id> wordt gebruikt om een bestaand item met de gespecificeerde item_id bij te werken. De cliënt stuurt de bijgewerkte gegevens in het verzoeksobject, en de server wijzigt het bestaande item. Als het item niet wordt gevonden, reageert de server met een 404 Not Found-foutmelding.

  • DELETE /api/items/<int:item_id>: Een DELETE-verzoek naar /api/items/<item_id> verwijdert het item met de opgegeven item_id uit de gegevensbank. Als de verwijdering gelukt is, reageert de server met een 204 No Content-statuscode, die aangeeft dat de verwijdering succesvol was en dat er geen extra inhoud meer terug te geven is.

  • Toepassen van de applicatie: Het blok if __name__ == "__main__": zorgt ervoor dat de Flask-applicatie wordt uitgevoerd wanneer het script direct wordt uitgevoerd.

Stap 4 — Uw API starten en testen

Start uw Flask-server met behulp van het volgende commando:

root@ubuntu:~# python3 app.py

U zou kunnen merken dat de Flask-server wordt uitgevoerd met de volgende uitvoer:

Output
* Serving Flask app 'app' * Debug mode: on WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Running on http://127.0.0.1:5000 Press CTRL+C to quit * Restarting with stat * Debugger is active! * Debugger PIN: 837-877-972

U kunt uit de bovengenoemde uitvoer zien dat de server wordt uitgevoerd op http://127.0.0.1 en luistert op poort 5000.

Nu kunt u de endpoints testen met behulp van curl, Postman of een andere HTTP-client. In deze handleiding zal u curl gebruiken om de endpoints te testen en HTTP-verzoeken te sturen.

Open een andere Ubuntu-console en voer de volgende curl-commando’s één voor één uit:

  • GET: curl http://127.0.0.1:5000/api/items
  • POST: curl -X POST -H "Content-Type: application/json" -d '{"name": "This is item 3"}' http://127.0.0.1:5000/api/items
  • PUT: curl -X PUT -H "Content-Type: application/json" -d '{"name": "This is updated item 1"}' http://127.0.0.1:5000/api/items/1
  • DELETE: curl -X DELETE http://127.0.0.1:5000/api/items/1

Laat ons de actie van elk van deze commando’s zien:

root@ubuntu:~# curl http://127.0.0.1:5000/api/items
Output
[ { "id": 1, "name": "This is item 1" }, { "id": 2, "name": "This is item 2" } ]

U zult merken dat de server een lijst teruggeeft van alle items in de items gegevensbank.

Gebruikmakend van de POST methode, laten we een nieuw item toevoegen aan de gegevensbank.

root@ubuntu:~# curl -X POST -H "Content-Type: application/json" -d '{"name": "Dit is item 3"}' http://127.0.0.1:5000/api/items
Output
{ "id": 3, "name": "This is item 3" }

Note: Op uw andere console waar uw Flask server actief is, zult u zien dat alle HTTP-verzoeken worden uitgevoerd en hun reactiecodes ook.

* Running on http://127.0.0.1:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: 837-877-972
127.0.0.1 - - [23/Aug/2024 06:57:27] "GET /api/items HTTP/1.1" 200 -
127.0.0.1 - - [23/Aug/2024 06:59:56] "POST /api/items HTTP/1.1" 201 -

Dit is een goed middel om te monitoren, fouten te debuggen en problemen op te lossen met de server.

Volgensga, laat ons een PUT verzoek uitvoeren. Een PUT verzoek naar /api/items/<item_id> zal een bestaand item met de gespecificeerde item_id bijwerken.

root@ubuntu:~# curl -X PUT -H "Content-Type: application/json" -d '{"name": "Dit is bijgewerkte item 1"}' http://127.0.0.1:5000/api/items/1
Output
{ "id": 1, "name": "This is updated item 1" }

Nu, laat ons een GET verzoek uitvoeren om het bijgewerkte item 1 te zien.

root@ubuntu:~# curl http://127.0.0.1:5000/api/items/1
Output
{ "id": 1, "name": "This is updated item 1" }

Uiteindelijk, laat ons een DELETE verzoek uitvoeren om een item uit de gegevensbank te verwijderen.

root@ubuntu:~# curl -X DELETE http://127.0.0.1:5000/api/items/1

Dit zal item 1 uit de gegevensbank verwijderen.

Om dit te verifiëren, laat ons een GET verzoek uitvoeren.

root@ubuntu:~# curl http://127.0.0.1:5000/api/items
Output
[ { "id": 2, "name": "This is item 2" }, { "id": 3, "name": "This is item 3" } ]

U zult zien dat item 1 niet meer aanwezig is en permanent is verwijderd.

Conclusie

In deze handleiding heb je een basis REST API-app gerealiseerd met Flask. U kunt nu deze API uitbreiden met extra routes, integreren met een database of op een cloudplatform zoals DigitalOcean deployen. Flask is een krachtige tool voor het snel en efficiënt bouwen van API’s, en met deze basis kunt u beginnen met het bouwen van complexere toepassingen.

Source:
https://www.digitalocean.com/community/tutorials/create-a-rest-api-using-flask-on-ubuntu