20TD02Y_CCNA_20TD02U_Del5 - itnett/FTD02H-N GitHub Wiki

Lab Scenarioer for APIer

Lab 1: Hva er et API? Forståelse og Grunnleggende Bruk

Mål:

  • Forstå hva et API er.
  • Lære å bruke APIer i Python ved hjelp av requests-biblioteket.

Steg-for-steg Guide:

  1. Opprett et nytt Python-prosjekt og installer requests-biblioteket:

    pip install requests
    
  2. Opprett en Python-fil (basic_api_usage.py) og skriv kode for å utføre en GET-forespørsel:

    import requests
    
    url = 'https://api.github.com'
    response = requests.get(url)
    
    print(f'Status Code: {response.status_code}')
    print('Response JSON:')
    print(response.json())
    
  3. Kjør Python-filen for å se resultatet av GET-forespørselen:

    python basic_api_usage.py
    

Lab 2: Typer av APIer og Grunnleggende Konsepter

Mål:

  • Forstå de forskjellige typene APIer.
  • Lære grunnleggende konsepter som endpoints, HTTP-metoder, headers og statuskoder.

Steg-for-steg Guide:

  1. Opprett en Python-fil (api_concepts.py) og skriv kode for å utføre POST, PUT og DELETE forespørsler:

    import requests
    
    base_url = 'https://jsonplaceholder.typicode.com/posts'
    
    # GET request
    response = requests.get(base_url)
    print(f'GET Status Code: {response.status_code}')
    print('GET Response JSON:')
    print(response.json()[:2])  # Print only first 2 items for brevity
    
    # POST request
    new_post = {
        'title': 'foo',
        'body': 'bar',
        'userId': 1
    }
    response = requests.post(base_url, json=new_post)
    print(f'POST Status Code: {response.status_code}')
    print('POST Response JSON:')
    print(response.json())
    
    # PUT request
    update_post = {
        'title': 'foo updated',
        'body': 'bar updated',
        'userId': 1
    }
    response = requests.put(f'{base_url}/1', json=update_post)
    print(f'PUT Status Code: {response.status_code}')
    print('PUT Response JSON:')
    print(response.json())
    
    # DELETE request
    response = requests.delete(f'{base_url}/1')
    print(f'DELETE Status Code: {response.status_code}')
    print('DELETE Response JSON:')
    print(response.json())
    
  2. Kjør Python-filen for å se resultatet av POST, PUT og DELETE forespørslene:

    python api_concepts.py
    

Lab 3: Autentisering og Feilhåndtering

Mål:

  • Lære å bruke APIer som krever autentisering.
  • Implementere feilhåndtering ved bruk av APIer.

Steg-for-steg Guide:

  1. Opprett en Python-fil (auth_error_handling.py) og skriv kode for å utføre en GET-forespørsel med autentisering:

    import requests
    
    url = 'https://api.github.com/user'
    token = 'YOUR_PERSONAL_ACCESS_TOKEN'  # Replace with your GitHub token
    
    headers = {
        'Authorization': f'Bearer {token}'
    }
    
    try:
        response = requests.get(url, headers=headers)
        response.raise_for_status()  # Raise HTTPError for bad responses (4xx and 5xx)
        print('Authenticated GET Response JSON:')
        print(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}')
    
  2. Kjør Python-filen og observer resultatet:

    python auth_error_handling.py
    

Lab 4: Bygge et Enkelt RESTful API med Flask

Mål:

  • Bygge et RESTful API ved hjelp av Flask.
  • Implementere grunnleggende CRUD-operasjoner (Create, Read, Update, Delete).

Steg-for-steg Guide:

  1. Installer Flask:

    pip install Flask
    
  2. Opprett en Python-fil (flask_api.py) og skriv kode for et enkelt RESTful API:

    from flask import Flask, jsonify, request
    
    app = Flask(__name__)
    
    users = [
        {'id': 1, 'name': 'Alice', 'email': '[email protected]'},
        {'id': 2, 'name': 'Bob', 'email': '[email protected]'}
    ]
    
    @app.route('/users', methods=['GET'])
    def get_users():
        return jsonify(users)
    
    @app.route('/users', methods=['POST'])
    def create_user():
        new_user = request.get_json()
        users.append(new_user)
        return jsonify(new_user), 201
    
    @app.route('/users/<int:user_id>', methods=['PUT'])
    def update_user(user_id):
        updated_user = request.get_json()
        for user in users:
            if user['id'] == user_id:
                user.update(updated_user)
                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)
    
  3. Kjør Flask-applikasjonen:

    python flask_api.py
    
  4. Test API-et ved hjelp av Postman eller en annen API-klient.

Lab 5: Avanserte Konsepter i API-utvikling

Mål:

  • Implementere CORS, Rate Limiting og Caching i et Flask API.
  • Bruke GraphQL med Flask.

Steg-for-steg Guide:

  1. Installer nødvendige biblioteker:

    pip install Flask-Cors Flask-Limiter Flask-Caching graphene Flask-Graphene
    
  2. Opprett en Python-fil (advanced_flask_api.py) og skriv kode for å inkludere avanserte konsepter:

    from flask import Flask, jsonify, request
    from flask_cors import CORS
    from flask_limiter import Limiter
    from flask_caching import Cache
    from flask_graphql import GraphQLView
    import graphene
    
    app = Flask(__name__)
    CORS(app)
    limiter = Limiter(app, default_limits=["200 per day", "50 per hour"])
    cache = Cache(app, config={'CACHE_TYPE': 'simple'})
    
    users = [
        {'id': 1, 'name': 'Alice', 'email': '[email protected]'},
        {'id': 2, 'name': 'Bob', 'email': '[email protected]'}
    ]
    
    @app.route('/users', methods=['GET'])
    @limiter.limit("10 per minute")
    @cache.cached(timeout=60)
    def get_users():
        return jsonify(users)
    
    @app.route('/users', methods=['POST'])
    def create_user():
        new_user = request.get_json()
        users.append(new_user)
        return jsonify(new_user), 201
    
    @app.route('/users/<int:user_id>', methods=['PUT'])
    def update_user(user_id):
        updated_user = request.get_json()
        for user in users:
            if user['id'] == user_id:
                user.update(updated_user)
                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
    
    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 users
    
    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)
    
  3. Kjør Flask-applikasjonen:

    python advanced_flask_api.py
    
  4. Test API-et ved hjelp av Postman eller en annen API-klient og utforsk GraphQL-endepunktet på /graphql.

Oppsummering

Disse lab-scenarioene dekker grunnleggende og avanserte konsepter innen API-utvikling, inkludert hva et API er, typer APIer, grunnleggende konsepter, autentisering, feilhåndtering, bygging av RESTful APIer med Flask, og implementering av avanserte funksjoner som CORS, rate limiting, caching og GraphQL. Disse labbene gir en omfattende forståelse og praktisk erfaring med API-utvikling i Python.