20TD02U API - itnett/FTD02H-N GitHub Wiki

Alt du trenger å vite om API-er

Hva er et API?

API står for "Application Programming Interface". Det er et sett med regler og definisjoner som tillater to applikasjoner å kommunisere med hverandre. API-er brukes til å få tilgang til funksjonalitet eller data fra andre programmer, systemer eller tjenester.

Typer av API-er

  1. RESTful API-er (Representational State Transfer)

    • Basert på HTTP-protokollen.
    • Bruker HTTP-metoder som GET, POST, PUT, DELETE.
    • Data overføres ofte i JSON- eller XML-format.
  2. SOAP API-er (Simple Object Access Protocol)

    • Basert på XML og fungerer over HTTP, SMTP, TCP osv.
    • Mer komplekse enn RESTful API-er, men tilbyr formell standardisering.
  3. GraphQL API-er

    • Utviklet av Facebook.
    • Lar klienter forespørre spesifikke data ved å definere strukturen av ønsket data.
    • Mer effektiv enn REST for visse bruksområder.
  4. RPC API-er (Remote Procedure Call)

    • Kaller funksjoner/metoder på en ekstern server som om de var lokale.
    • To varianter: XML-RPC og JSON-RPC.

Grunnleggende Konsepter

  1. Endpoint

    • En spesifikk URL som API-en eksponerer for å utføre en operasjon.
    • Eksempel: https://api.example.com/v1/users
  2. HTTP Metoder

    • GET: Henter data fra serveren.
    • POST: Sender data til serveren for å opprette en ny ressurs.
    • PUT: Oppdaterer en eksisterende ressurs.
    • DELETE: Sletter en ressurs.
  3. Headers

    • Inneholder metadata for forespørselen som autorisasjon, content-type osv.
  4. Statuskoder

    • Angir resultatet av HTTP-forespørselen.
    • Eksempler: 200 (OK), 201 (Created), 400 (Bad Request), 401 (Unauthorized), 404 (Not Found), 500 (Internal Server Error).
  5. Payload/Body

    • Data som sendes med POST- eller PUT-forespørsler.
    • Ofte i JSON- eller XML-format.

Eksempel på en RESTful API

La oss se på et eksempel på hvordan man kan bruke en RESTful API i Python med biblioteket requests.

Installere requests-biblioteket
pip install requests
GET Forespørsel
import requests

url = 'https://api.example.com/v1/users'
response = requests.get(url)

if response.status_code == 200:
    users = response.json()
    print(users)
else:
    print(f"Failed to retrieve data: {response.status_code}")
POST Forespørsel
import requests

url = 'https://api.example.com/v1/users'
data = {
    'name': 'John Doe',
    'email': '[email protected]'
}

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

if response.status_code == 201:
    print("User created successfully")
else:
    print(f"Failed to create user: {response.status_code}")
PUT Forespørsel
import requests

url = 'https://api.example.com/v1/users/1'
data = {
    'name': 'John Doe',
    'email': '[email protected]'
}

response = requests.put(url, json=data)

if response.status_code == 200:
    print("User updated successfully")
else:
    print(f"Failed to update user: {response.status_code}")
DELETE Forespørsel
import requests

url = 'https://api.example.com/v1/users/1'
response = requests.delete(url)

if response.status_code == 204:
    print("User deleted successfully")
else:
    print(f"Failed to delete user: {response.status_code}")

Autentisering

  1. API Nøkler

    • Enkel metode for å identifisere applikasjoner som foretar forespørsler.
    • Nøkkelen sendes vanligvis som en header.

    Eksempel:

    headers = {
        'Authorization': 'Bearer YOUR_API_KEY'
    }
    response = requests.get(url, headers=headers)
    
  2. OAuth

    • Mer sikker metode som gir tilgangs- og oppfriskningstokens.
    • Ofte brukt av store plattformer som Google, Facebook, Twitter.

Feilhåndtering

  1. Statuskoder

    • Bruk statuskoder til å identifisere om forespørselen var vellykket eller ikke.
    • Håndter ulike koder med passende handlinger.
  2. Exception Handling

    • Bruk try-except blokker for å håndtere nettverksfeil.

    Eksempel:

    try:
        response = requests.get(url)
        response.raise_for_status()
    except requests.exceptions.HTTPError as err:
        print(f"HTTP error occurred: {err}")
    except Exception as err:
        print(f"Other error occurred: {err}")
    

Dokumentasjon

God dokumentasjon er essensiell for bruk av API-er. Vanlige formater inkluderer:

  1. Swagger/OpenAPI

    • Interaktiv API-dokumentasjon som lar brukerne teste endepunkter.
  2. Postman

    • Verktøy for å teste og dokumentere API-er.
  3. API Dokumentasjon på nettsider

    • Mange API-leverandører tilbyr detaljerte dokumentasjoner på sine nettsider.

Beste Praksiser

  1. Bruk HTTPS

    • Alltid bruk HTTPS for å sikre dataoverføring.
  2. Rate Limiting

    • Implementer og respekter rate limits for å unngå overbelastning av servere.
  3. Versjonering

    • Inkluder API-versjon i endepunktet for å sikre bakoverkompatibilitet.
    • Eksempel: https://api.example.com/v1/
  4. Gi meningsfulle feilmeldinger

    • Sørg for at API-en returnerer klare og meningsfulle feilmeldinger.
  5. Håndter timeout og retries

    • Implementer logikk for å håndtere timeouts og automatiske retries ved feil.

Eksempel på et komplett API-prosjekt

La oss lage et enkelt API ved hjelp av Flask, et mikro-webrammeverk for Python.

Installere Flask
pip install Flask
Eksempel på Flask API
from flask import Flask, request, jsonify

app = Flask(__name__)

users = []

@app.route('/users', methods=['GET'])
def get_users():
    return jsonify(users)

@app.route('/users', methods=['POST'])
def create_user():
    data = request.json
    user = {
        'id': len(users) + 1,
        'name': data['name'],
        'email': data['email']
    }
    users.append(user)
    return jsonify(user), 201

@app.route('/users/<int:user_id>', methods=['PUT'])
def update_user(user_id):
    data = request.json
    for user in users:
        if user['id'] == user_id:
            user['name'] = data.get('name', user['name'])
            user['email'] = data.get('email', user['email'])
            return jsonify(user)
    return jsonify({'message': 'User not found'}), 404

@app.route('/users/<int:user_id>', methods=['DELETE'])
def delete_user(user_id):
    global users
    users = [user for user in users if user['id'] != user_id]
    return '', 204

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

Dette eksemplet viser hvordan du kan lage et enkelt API for å opprette, hente, oppdatere og slette brukere.

Oppsummering

API-er er kraftige verktøy for å bygge integrerte systemer og applikasjoner. Med en god forståelse av de ulike typene API-er, HTTP-metoder, autentisering, feilhåndtering og beste praksiser, kan du effektivt utnytte API-er i dine prosjekter.

Spørsmål for Videre Utforskning

  1. Hva er fordelene med å bruke GraphQL over RESTful API-er?
  2. Hvordan implementerer du rate limiting i et Flask API?
  3. Hva er CORS, og hvorfor er det viktig i API-utvikling?
  4. Hvordan kan du sikre at ditt API skalerer godt med økende trafikk?
  5. Hvordan kan du dokumentere ditt API automatisk med Swagger?

Et nyttig tips: Bruk Postman til å teste og validere dine API-endepunkter under utvikling.

Fortsettelse om API-er: Dybde i Avanserte Konsepter

Vi har allerede dekket grunnleggende konsepter og eksempler på API-er, men det er flere avanserte emner som er verdt å utforske. La oss gå dypere inn i følgende temaer:

  1. CORS (Cross-Origin Resource Sharing)
  2. API-gateways
  3. Rate Limiting
  4. Caching
  5. Versioning
  6. API Monitoring og Logging
  7. Security Best Practices
  8. GraphQL

CORS (Cross-Origin Resource Sharing)

CORS er en sikkerhetsfunksjon som forhindrer webapplikasjoner i å gjøre forespørsler til et domene som er forskjellig fra domenet som lastet webapplikasjonen. For eksempel, hvis en applikasjon lastes fra https://example.com, kan den ikke gjøre en forespørsel til https://api.anotherdomain.com uten riktig CORS-konfigurasjon.

Konfigurasjon av CORS i Flask
from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
CORS(app)

@app.route('/users', methods=['GET'])
def get_users():
    return jsonify(users)

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

API-gateways

En API-gateway fungerer som en ombudsmann for flere API-er. Den tilbyr funksjoner som routing, rate limiting, autentisering, overvåking og caching.

Eksempler på API-gateways:
  • Kong: En populær open-source API-gateway basert på NGINX.
  • AWS API Gateway: En administrert tjeneste fra Amazon Web Services.
  • Apigee: En enterprise-løsning fra Google.

Rate Limiting

Rate limiting kontrollerer antall forespørsler en bruker kan gjøre til API-et over en bestemt tidsperiode. Dette beskytter API-et mot overbelastning og misbruk.

Implementering av Rate Limiting i Flask med Flask-Limiter
pip install Flask-Limiter
from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

app = Flask(__name__)
limiter = Limiter(
    get_remote_address,
    app=app,
    default_limits=["200 per day", "50 per hour"]
)

@app.route('/users', methods=['GET'])
@limiter.limit("10 per minute")
def get_users():
    return jsonify(users)

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

Caching

Caching lagrer kopier av data for raskere tilgang ved fremtidige forespørsler. Dette reduserer belastningen på serveren og forbedrer ytelsen.

Bruk av Flask-Caching
pip install Flask-Caching
from flask import Flask
from flask_caching import Cache

app = Flask(__name__)
cache = Cache(app, config={'CACHE_TYPE': 'simple'})

@app.route('/users', methods=['GET'])
@cache.cached(timeout=60)
def get_users():
    return jsonify(users)

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

Versioning

API-versjonering sikrer bakoverkompatibilitet og gjør det mulig for utviklere å introdusere endringer uten å bryte eksisterende klienter.

Eksempler på versjonering:
  • URI Versioning: https://api.example.com/v1/users
  • Query Parameter Versioning: https://api.example.com/users?version=1
  • Header Versioning: Accept: application/vnd.example.v1+json

API Monitoring og Logging

Overvåking og logging er kritiske for å oppdage problemer og forstå API-bruk.

Bruk av Flask-Logging
import logging
from flask import Flask

app = Flask(__name__)

logging.basicConfig(level=logging.INFO)

@app.route('/users', methods=['GET'])
def get_users():
    app.logger.info("GET /users")
    return jsonify(users)

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

Security Best Practices

  1. Bruk HTTPS: Sikre dataoverføring med TLS/SSL.
  2. API Nøkler og OAuth: Bruk sterke autentiseringsmetoder.
  3. Rate Limiting: Beskytt mot overbelastning og DoS-angrep.
  4. Input Validering: Beskytt mot injeksjonsangrep.
  5. Logging og Overvåking: Oppdag og responder på sikkerhetshendelser.
Eksempel på sikkerhetstiltak med Flask
from flask import Flask, request, jsonify
from werkzeug.security import generate_password_hash, check_password_hash

app = Flask(__name__)

users = {}

@app.route('/register', methods=['POST'])
def register():
    data = request.json
    username = data['username']
    password = generate_password_hash(data['password'], method='sha256')
    users[username] = password
    return jsonify({'message': 'User registered successfully'}), 201

@app.route('/login', methods=['POST'])
def login():
    data = request.json
    username = data['username']
    password = data['password']
    stored_password = users.get(username)

    if stored_password and check_password_hash(stored_password, password):
        return jsonify({'message': 'Login successful'}), 200
    return jsonify({'message': 'Invalid credentials'}), 401

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

GraphQL

GraphQL er et alternativ til REST og gir mer fleksible dataforespørsler. Klienter kan spesifisere nøyaktig hvilke data de trenger.

Bruk av GraphQL med Flask-Graphene
pip install graphene graphene-flask
from flask import Flask
from flask_graphql import GraphQLView
import graphene

app = Flask(__name__)

class User(graphene.ObjectType):
    id = graphene.Int()
    name = graphene.String()
    email = graphene.String()

class Query(graphene.ObjectType):
    users = graphene.List(User)

    def resolve_users(self, info):
        return [
            User(id=1, name="Ola Nordmann", email="[email protected]"),
            User(id=2, name="Kari Nordmann", email="[email protected]")
        ]

schema = graphene.Schema(query=Query)
app.add_url_rule('/graphql', view_func=GraphQLView.as_view('graphql', schema=schema, graphiql=True))

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

Oppsummering

API-utvikling krever forståelse av flere avanserte konsepter og beste praksiser. Vi har dekket viktige emner som CORS, API-gateways, rate limiting, caching, versjonering, overvåking, sikkerhet og GraphQL. Med denne kunnskapen kan du bygge robuste og sikre API-er som kan skaleres og vedlikeholdes effektivt.

Spørsmål for Videre Utforskning

  1. Hvordan håndterer du versjonskonflikter i API-et ditt?
  2. Hva er de beste metodene for å sikre API-et ditt mot SQL-injeksjonsangrep?
  3. Hvordan kan du implementere GraphQL-subscriptions for sanntidsoppdateringer?
  4. Hvordan balanserer du ytelse og sikkerhet i API-et ditt?
  5. Hva er fordeler og ulemper med ulike autentiseringsmetoder (API-nøkler, OAuth, JWT)?

Et nyttig tips: Bruk verktøy som Postman eller Insomnia til å teste API-endepunkter under utvikling og sikre at de oppfører seg som forventet.

Fortsettelse om API-er: Enda Mer Dybde

For å få en komplett forståelse av API-er og hvordan de fungerer i praksis, er det viktig å dekke noen flere avanserte emner som API-designprinsipper, dokumentasjon, testing, og bruk av API-er i mikrotjenestearkitekturer.

API Design Prinsipper

  1. Konsistens og Standardisering

    • Bruk konsistente navn og strukturer for endepunkter og parametere.
    • Følg RESTful standarder for URI-er, HTTP-metoder og statuskoder.
  2. Klar og Konsis Dokumentasjon

    • Dokumenter alle endepunkter, parametere, responsformater og feiltilstander.
    • Bruk verktøy som Swagger/OpenAPI for å generere dokumentasjon automatisk.
  3. Feilhåndtering

    • Gi meningsfulle feilmeldinger med relevante statuskoder.
    • Standardiser feilformater for enkel parsing.
  4. Sikkerhet og Autentisering

    • Bruk HTTPS for alle forespørsler.
    • Implementer sterke autentiserings- og autorisasjonsmekanismer som OAuth 2.0 eller JWT.
  5. Skalerbarhet og Ytelse

    • Optimaliser API-er for ytelse med caching og rate limiting.
    • Design API-er for å skalere horisontalt ved å være stateless.

API Dokumentasjon

Gode API-er kommer med god dokumentasjon. Dette inkluderer beskrivelse av endepunkter, parametere, eksempler på forespørsler og svar, samt informasjon om autentisering og feilhåndtering.

Bruk av Swagger/OpenAPI

Swagger (nå en del av OpenAPI Initiative) er et sett med verktøy for API-design og dokumentasjon. Ved å bruke Swagger kan du generere interaktiv dokumentasjon som lar utviklere teste API-endepunkter direkte fra dokumentasjonen.

Eksempel på Swagger-dokumentasjon i Flask:

pip install flask-swagger-ui
from flask import Flask, jsonify
from flask_swagger_ui import get_swaggerui_blueprint

app = Flask(__name__)

SWAGGER_URL = '/swagger'
API_URL = '/static/swagger.json'
swaggerui_blueprint = get_swaggerui_blueprint(SWAGGER_URL, API_URL)
app.register_blueprint(swaggerui_blueprint, url_prefix=SWAGGER_URL)

@app.route('/users', methods=['GET'])
def get_users():
    return jsonify([{'id': 1, 'name': 'John Doe'}, {'id': 2, 'name': 'Jane Doe'}])

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

Opprett en swagger.json-fil:

{
  "swagger": "2.0",
  "info": {
    "title": "Sample API",
    "version": "1.0.0"
  },
  "paths": {
    "/users": {
      "get": {
        "summary": "List all users",
        "responses": {
          "200": {
            "description": "A list of users",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/User"
              }
            }
          }
        }
      }
    }
  },
  "definitions": {
    "User": {
      "type": "object",
      "properties": {
        "id": {
          "type": "integer"
        },
        "name": {
          "type": "string"
        }
      }
    }
  }
}

Testing av API-er

  1. Enhetstesting

    • Test individuelle endepunkter for å sikre at de oppfører seg som forventet.
    • Bruk rammeverk som unittest eller pytest.
  2. Integrasjonstesting

    • Test interaksjonen mellom flere endepunkter og systemer.
    • Bruk verktøy som Postman til å sette opp automatiserte testscenarier.
  3. Lasttesting

    • Test hvordan API-et håndterer stor trafikkmengde.
    • Bruk verktøy som JMeter eller Locust.
Eksempel på Enhetstesting med Flask og Pytest

Installer Pytest:

pip install pytest

Eksempel på enhetstest:

import pytest
from app import app

@pytest.fixture
def client():
    with app.test_client() as client:
        yield client

def test_get_users(client):
    rv = client.get('/users')
    assert rv.status_code == 200
    assert b'John Doe' in rv.data

Kjør testen:

pytest

Mikrotjenestearkitektur

API-er spiller en sentral rolle i mikrotjenestearkitekturer, hvor applikasjonen er delt inn i mindre, selvstendige tjenester som kommuniserer via API-er.

  1. Desentralisering

    • Hver tjeneste har sitt eget datalager og er ansvarlig for en spesifikk funksjon.
  2. Kommunikasjon

    • Tjenestene kommuniserer via HTTP/REST, gRPC eller meldingskøer.
  3. Uavhengig distribusjon

    • Hver tjeneste kan distribueres, skaleres og oppdateres uavhengig av de andre.
Eksempel på Mikrotjenester med Flask

Tjeneste A (User Service):

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/users', methods=['GET'])
def get_users():
    return jsonify([{'id': 1, 'name': 'John Doe'}, {'id': 2, 'name': 'Jane Doe'}])

if __name__ == '__main__':
    app.run(port=5000)

Tjeneste B (Order Service):

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/orders', methods=['GET'])
def get_orders():
    return jsonify([{'order_id': 1, 'user_id': 1, 'amount': 100}, {'order_id': 2, 'user_id': 2, 'amount': 200}])

if __name__ == '__main__':
    app.run(port=5001)

Kommunikasjon mellom tjenester:

import requests

def get_user_orders(user_id):
    user = requests.get(f'http://localhost:5000/users/{user_id}').json()
    orders = requests.get(f'http://localhost:5001/orders?user_id={user_id}').json()
    return {'user': user, 'orders': orders}

if __name__ == '__main__':
    user_orders = get_user_orders(1)
    print(user_orders)

Oppsummering

API-er er essensielle verktøy for moderne applikasjonsutvikling, og det er viktig å forstå både grunnleggende og avanserte konsepter for å kunne bygge effektive, skalerbare og sikre API-er. Vi har dekket designprinsipper, dokumentasjon, testing, og bruk i mikrotjenestearkitekturer.

Spørsmål for Videre Utforskning

  1. Hvordan håndterer du sikker kommunikasjon mellom mikrotjenester?
  2. Hva er fordeler og ulemper med monolittisk arkitektur vs. mikrotjenestearkitektur?
  3. Hvordan kan du implementere observability (logging, metrics, tracing) i API-er?
  4. Hvordan håndterer du schema evolusjon i GraphQL?
  5. Hva er beste praksis for versjonering av API-er i en mikrotjenestearkitektur?

Et nyttig tips: Bruk CI/CD-verktøy for å automatisere bygging, testing og distribusjon av API-ene dine, slik at du kan levere nye funksjoner raskere og med høyere kvalitet.

Selvfølgelig! La oss utforske hva APIer er, hvorfor de er viktige, og hvordan du kan bruke dem i praksis. Vi vil fokusere på grunnleggende konsepter og gi deg praktiske eksempler i Python.

Hva er et API?

API står for Application Programming Interface. Det er et sett med regler og protokoller som lar forskjellige programvareapplikasjoner kommunisere med hverandre. APIer definerer metodene og dataformatene som applikasjoner kan bruke for å be om og utveksle data.

Hvorfor er APIer Viktige?

  • Interoperabilitet: APIer lar forskjellige systemer og applikasjoner jobbe sammen.
  • Modularitet: Applikasjoner kan brytes ned i mindre, gjenbrukbare moduler som kommuniserer via APIer.
  • Ekstern tilgang: APIer gir eksterne utviklere tilgang til spesifikke funksjoner eller data fra en applikasjon uten å eksponere hele systemet.

Typer APIer

  1. Web APIer: Også kjent som HTTP- eller RESTful APIer, brukes til å utveksle data over nettet ved hjelp av HTTP-protokollen.
  2. Biblioteks-APIer: Funksjoner eller metoder som tilbys av et programmeringsbibliotek.
  3. Operativsystem-APIer: Funksjoner som operativsystemet tilbyr for å utføre lavnivå operasjoner.

Grunnleggende Konsepter

REST (Representational State Transfer)

En stilarkitektur for utforming av nettbaserte tjenester. RESTful APIer bruker HTTP-metoder som GET, POST, PUT og DELETE.

  • GET: Hent data.
  • POST: Send data for å opprette en ny ressurs.
  • PUT: Oppdater en eksisterende ressurs.
  • DELETE: Slett en ressurs.

JSON (JavaScript Object Notation)

Et lettvekts datautvekslingsformat som er lett å lese og skrive for mennesker, og lett å parse og generere for maskiner.

{
  "name": "Alice",
  "age": 25,
  "city": "New York"
}

Bruke APIer i Python

Vi vil bruke requests-biblioteket for å sende HTTP-forespørsler til et API.

Installere Requests

Først må du installere requests-biblioteket hvis du ikke allerede har det:

pip install requests

Eksempler på Bruk

  1. GET-forespørsel Hent data fra en API.
import requests

response = requests.get('https://api.github.com')
print(response.status_code)  # Output: 200
print(response.json())       # Output: JSON-innholdet i svaret
  1. POST-forespørsel Send data til en API for å opprette en ny ressurs.
import requests

url = 'https://httpbin.org/post'
data = {'name': 'Alice', 'age': 25}
response = requests.post(url, json=data)
print(response.status_code)  # Output: 200
print(response.json())       # Output: JSON-innholdet i svaret
  1. PUT-forespørsel Oppdater en eksisterende ressurs.
import requests

url = 'https://httpbin.org/put'
data = {'name': 'Alice', 'age': 26}
response = requests.put(url, json=data)
print(response.status_code)  # Output: 200
print(response.json())       # Output: JSON-innholdet i svaret
  1. DELETE-forespørsel Slett en ressurs.
import requests

url = 'https://httpbin.org/delete'
response = requests.delete(url)
print(response.status_code)  # Output: 200
print(response.json())       # Output: JSON-innholdet i svaret

Autentisering

Mange APIer krever autentisering for å sikre at bare autoriserte brukere får tilgang til tjenestene. En vanlig metode er bruk av API-nøkler.

import requests

url = 'https://api.example.com/data'
headers = {'Authorization': 'Bearer YOUR_API_KEY'}
response = requests.get(url, headers=headers)
print(response.status_code)  # Output: 200 (hvis nøkkelen er gyldig)
print(response.json())       # Output: JSON-innholdet i svaret

Håndtering av Feil

Det er viktig å håndtere feil som kan oppstå når du bruker APIer.

import requests

url = 'https://api.example.com/data'
try:
    response = requests.get(url)
    response.raise_for_status()  # Kaster en feil hvis statuskoden ikke er 200
    data = response.json()
except requests.exceptions.HTTPError as http_err:
    print(f'HTTP error occurred: {http_err}')
except Exception as err:
    print(f'Other error occurred: {err}')
else:
    print('Success!')

Bygge et Enkelt RESTful API med Flask

La oss bygge et enkelt RESTful API ved hjelp av Flask, et mikro-webrammeverk for Python.

Installere Flask

pip install Flask

Eksempel på et Enkelt API

from flask import Flask, jsonify, request

app = Flask(__name__)

data = [
    {'id': 1, 'name': 'Alice'},
    {'id': 2, 'name': 'Bob'}
]

@app.route('/data', methods=['GET'])
def get_data():
    return jsonify(data)

@app.route('/data', methods=['POST'])
def add_data():
    new_item = request.get_json()
    data.append(new_item)
    return jsonify(new_item), 201

@app.route('/data/<int:item_id>', methods=['PUT'])
def update_data(item_id):
    updated_item = request.get_json()
    for item in data:
        if item['id'] == item_id:
            item.update(updated_item)
            return jsonify(item)
    return jsonify({'message': 'Item not found'}), 404

@app.route('/data/<int:item_id>', methods=['DELETE'])
def delete_data(item_id):
    global data
    data = [item for item in data if item['id'] != item_id]
    return jsonify({'message': 'Item deleted'})

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

Oppsummering

  • APIer lar ulike programvarekomponenter kommunisere med hverandre, noe som muliggjør interoperabilitet og modularitet.
  • RESTful APIer bruker HTTP-metoder og JSON for å utveksle data.
  • Python Requests-biblioteket gjør det enkelt å sende HTTP-forespørsler til APIer.
  • Flask kan brukes til å bygge enkle og effektive RESTful APIer.

Hvis du har flere spørsmål eller trenger ytterligere informasjon om et spesifikt emne relatert til APIer, er du velkommen til å spørre!