
使用 ASP.NET Web API 构建 RESTful API
教育数据门户是一个应用程序接口(API),旨在帮助研究人员轻松访问多个来源的教育数据。在本文中,我们将详细探讨教育数据门户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