
使用 ASP.NET Web API 構建 RESTful API
為了專注于構建功能豐富的API,我們選擇了基于Django框架的開發方式。以下是選擇Django的主要原因:
教育數據門戶的數據庫規模龐大,包含150多個數據表,并且預計會持續增長。為了滿足存儲和訪問需求,我們選擇了MySQL數據庫,并通過亞馬遜關系數據庫服務(RDS)進行托管。以下是這一選擇的主要優勢:
基于Django的API通常由以下四個部分組成,教育數據門戶的API也不例外:
數據庫模型是API的核心部分,定義了Django應用程序的數據庫結構,并通過ORM實現與數據庫的交互。以下是創建數據庫模型的基本步驟:
models.py
文件中,為每個數據庫表創建一個類。例如,以下代碼定義了綜合高等教育數據系統(IPEDS)招生數據的模型:
class IpedsAdmissionEnrollments(models.Model):
institution_name = models.CharField(max_length=255)
enrollment_count = models.IntegerField()
year = models.IntegerField()
class Meta:
db_table = 'ipeds_admissions_enrollments'
通過Django的ORM,開發人員可以使用Python代碼(而非SQL)與數據庫交互。例如,以下代碼返回所有IPEDS入學登記記錄:
IpedsAdmissionEnrollments.objects.all()
視圖集是Django REST框架(DRF)的核心組件之一,通常與路由器結合使用,以實現標準化的API行為。由于教育數據門戶的API僅提供只讀操作,我們選擇了ReadOnlyModelViewSet
類。以下是視圖集的基本實現:
from rest_framework.viewsets import ReadOnlyModelViewSet
from .models import IpedsAdmissionEnrollments
from .serializers import IpedsAdmissionEnrollmentsSerializer
class IpedsAdmissionsEnrollmentsViewSet(ReadOnlyModelViewSet):
queryset = IpedsAdmissionEnrollments.objects.all()
serializer_class = IpedsAdmissionEnrollmentsSerializer
序列化程序負責將數據庫中的數據轉換為API可以使用的格式。對于教育數據門戶,我們使用了模型序列化程序。以下是一個簡單的實現示例:
from rest_framework import serializers
from .models import IpedsAdmissionEnrollments
class IpedsAdmissionEnrollmentsSerializer(serializers.ModelSerializer):
class Meta:
model = IpedsAdmissionEnrollments
fields = '__all__'
通過fields='__all__'
,我們可以自動包含模型中的所有字段,也可以根據需要指定特定字段。
路由器定義了用戶訪問API時的URL模式。DRF提供了一種標準化的方法,無需為每個模式手動定義路由。例如,以下代碼為IPEDS招生數據表創建了兩個URL:
from rest_framework.routers import DefaultRouter
from .views import IpedsAdmissionsEnrollmentsViewSet
router = DefaultRouter()
router.register(r'college-university/ipeds/admissions-enrollment', IpedsAdmissionsEnrollmentsViewSet)
生成的URL包括:
/college-university/ipeds/admissions-enrollment/
:列出所有招生數據記錄。/college-university/ipeds/admissions-enrollment/[ID]/
:查看特定記錄的詳細信息。通過Django框架和MySQL數據庫,我們成功構建了一個高效、可擴展的教育數據門戶API。Django的ORM、視圖集、序列化程序和路由器等組件不僅簡化了開發流程,還提高了代碼的可維護性和可讀性。未來,我們將繼續優化API的性能和功能,以更好地服務于研究人員和政策制定者。
原文鏈接: https://urban-institute.medium.com/how-we-built-the-api-for-the-education-data-portal-cabbf4814a45