APIs (Application Programming Interfaces) enable applications to communicate with each other. Python provides excellent libraries for consuming and building APIs, making it a go-to language for integrating and creating web services.
Consuming APIs with Python
Using the requests Library
The requests library simplifies HTTP requests and is widely used for interacting with REST APIs.
Django REST Framework (DRF) extends Django for building APIs.
Installing DRF:
pip install djangorestframework
Creating an API with DRF:
Add 'rest_framework' to INSTALLED_APPS in settings.py.
Define a serializer in serializers.py:
from rest_framework import serializers
class ItemSerializer(serializers.Serializer):
id = serializers.IntegerField()
name = serializers.CharField(max_length=100)
Create a view in views.py:
from rest_framework.views import APIView
from rest_framework.response import Response
class ItemView(APIView):
def get(self, request):
data = [
{"id": 1, "name": "Item 1"},
{"id": 2, "name": "Item 2"}
]
return Response(data)
Map the view to a URL in urls.py:
from django.urls import path
from .views import ItemView
urlpatterns = [
path('api/items/', ItemView.as_view(), name='item-list'),
]
Advanced API Techniques
Pagination
Paginate API results to handle large datasets.
@app.route("/api/items", methods=["GET"])
def get_items():
page = int(request.args.get("page", 1))
per_page = int(request.args.get("per_page", 10))
items = [f"Item {i}" for i in range(1, 101)] # Sample data
start = (page - 1) * per_page
end = start + per_page
return jsonify(items[start:end])
Rate Limiting
Use tools like Flask-Limiter to restrict API usage.
pip install flask-limiter
from flask import Flask
from flask_limiter import Limiter
app = Flask(__name__)
limiter = Limiter(app, key_func=lambda: "user_key")
@app.route("/api/data")
@limiter.limit("5 per minute")
def limited_data():
return {"message": "Limited access"}
Error Handling
Provide meaningful error messages for invalid requests.