gtfs / rest-api
基于Slim Framework和Atlas.ORM的简单REST API,用于GTFS。
Requires
- atlas/orm: ^3.1
- gtfs/csa-php: ^1.0
- gtfs/realtime-php: ^1.0
- php-di/php-di: ^6.0
- slim/http: ^1.0
- slim/psr7: ^1.0
- slim/slim: 4.0
Requires (Dev)
- atlas/cli: ^2.2
This package is auto-updated.
Last update: 2024-09-19 01:10:10 UTC
README
基于Slim Framework和Atlas.ORM的简单REST API,用于GTFS(通用传输表规范)。
一般信息
本项目提供对GTFS 静态的完全支持的REST API。您需要的只是将GTFS源数据转换为SQLite 3数据库以及一个Web服务器。您可以在数据文件夹中找到一个有效数据库的模板。
安装/配置
要安装,只需键入
composer require gtfs/rest-api --create-project
或者克隆此GitHub仓库并键入
composer install
如果您想使用除/data/GTFS.db3之外的文件作为数据库,您必须更改/config/constants.php文件中的数据库名称。将常量APP_DATABASE
更改为不带文件扩展名的相对名称。
您还应确保,如果您想在生产环境中使用REST API,则将APP_DEBUG
常量设置为false。
安装所有依赖项和配置后,您可以将整个项目上传到您的Web服务器上的所需目录。
使用方法
通常,端点是{yourdomain}/api/v1/{resource}/{selector}
。{resource}
和{selector}
部分描述了您想要获取的结果以及如何获取这些结果。如果您省略了{selector}
,则REST API将检索给定{resource}
的所有对象。
默认情况下,REST API使用请求方法GET
提供100个对象的限制。这确保了提供的数据量不是太高。您可以通过将GET参数limit
附加到API请求来修改此限制,或者您可以设置GET参数offset
以从offset
开始检索下一个结果。
注意:将限制设置得太高可能会在使用REST API时导致错误!
资源与选择器
您可以在REST API中找到以下资源
每个资源都有不同的可选选择器和参数,这些在下一节中描述。
stops/byStopId
通过其停车站ID提供停车站。还包括下属停车站、层级、换乘和路径等信息。
URL: [GET] {yourdomain}/api/v1/stops/byStopId?stopId={STOP_ID}
stops/byLatLon
通过WGS 84格式的纬度和经度提供一系列停车站。您可以可选地设置最大距离(默认为10公里)。
URL: [GET] {yourdomain}/api/v1/stops/byLatLon?stopLat={LATITUDE}&stopLon={LONGITUDE}[&stopDistance={DISTANCE/KMs}]
stops/byStopName
通过停车站名称提供一系列停车站。
URL: [GET] {yourdomain}/api/v1/stops/byStopName?stopName={STOP_NAME}
routes/byRouteId
通过其路线ID提供路线。还包括父机构等更多信息。
URL: [GET] {yourdomain}/api/v1/routes/byRouteId?routeId={ROUTE_ID}
routes/byRouteName
通过其简称或全称提供一系列路线。还包括父机构等更多信息。
URL: [GET] {yourdomain}/api/v1/routes/byRouteName?routeName={ROUTE_NAME}
trips/byTripId
通过其行程ID提供行程。还包括父路线和机构、停车站时间、频率、形状和日历等更多信息。
URL: [GET] {yourdomain}/api/v1/trips/byTripId={TRIP_ID}
trips/byRouteId
根据路线ID提供一组行程。还包括进一步信息,如父路线和机构,以及包含站点和频率的停靠时间。您可以可选地设置日期和时间。
URL: [GET] {yourdomain}/api/v1/trips/byRouteId?routeId={ROUTE_ID}[&date={YYYYMMDD}][&time={HH:MM:SS}]
trips/byBlockId
根据区块ID提供一组行程。还包括进一步信息,如父路线和机构,以及包含站点和频率的停靠时间。您可以可选地设置日期和时间。
URL: [GET] {yourdomain}/api/v1/trips/byBlockId?blockId={BLOCK_ID}[&date={YYYYMMDD}][&time={HH:MM:SS}]
trips/byStopId
根据停靠ID提供一组行程。这可以是特定站点的ID或父站的ID。还包括进一步信息,如父路线和机构,以及包含站点和频率的停靠时间。您可以可选地设置日期和时间。
URL: [GET] {yourdomain}/api/v1/trips/byStopId?stopId={STOP_ID}[&date={YYYYMMDD}][&time={HH:MM:SS}]
trips/byVehicleId
提供由特定车辆服务的行程。 注意:此选择器仅适用于可用的GTFS-realtime数据!
URL: [GET] {yourdomain}/api/v1/trips/byVehicleId?vehicleId={VEHICLE_ID}
fares/byFareId
根据票价IT提供票价。还包括进一步信息,如票价规则。
URL: [GET] {yourdomain}/api/v1/fares/byFareId?fareId={FARE_ID}
fares/byZoneId
根据起点和终点区域ID提供一组票价。还包括进一步信息,如匹配的票价规则。您可以可选地设置机构ID。
URL: [GET] {yourdomain}/api/v1/fares/byZoneId?originZoneId{ORIGIN_ID}&destinationZoneId={DESTINATION_ID}[&agencyId={AGENCY_ID}]
fares/byRouteId
根据路线ID提供一组票价。还包括进一步信息,如匹配的票价规则。
URL: [GET] {yourdomain}/api/v1/fares/byRouteId?routeId={ROUTE_ID}
attributions/byAgencyId
根据机构ID提供一组归属。
URL: [GET] {yourdomain}/api/v1/attributions/byAgencyId?agencyId={AGENCY_ID}
attributions/byRouteId
根据路线ID提供一组归属。
URL: [GET] {yourdomain}/api/v1/attributions/byRouteId?routeId={ROUTE_ID}
attributions/byTripId
根据行程ID提供一组归属。
URL: [GET] {yourdomain}/api/v1/attributions/byTripId?tripId={TRIP_ID}
realtime/alerts
将包含服务警报的GTFS-realtme数据消息发布到数据库中。
URL: [POST] {yourdomain}/api/v1/realtime/alerts
根据警报ID删除特定的GTFS-realtime服务警报。
URL: [DELETE] {yourdomain}/api/v1/realtime/alerts?alertId={ALERT_ID}
realtime/tripUpdates
将包含行程更新的GTFS-realtime数据消息发布到数据库中。
URL: [POST] {yourdomain}/api/v1/realtime/tripUpdates
根据行程和路线ID删除特定行程的行程更新。可选地可以传递行程开始日期和行程开始时间。
URL: [DELETE] {yourdomain}/api/v1/realtime/tripUpdates?tripId={TRIP_ID}&routeId={ROUTE_ID}[&tripStartDate={TRIP_START_DATE}][&tripStartTime={TRIP_START_TIME}]
realtime/vehiclePositions
将包含车辆位置的GTFS-realtime数据消息发布到数据库中。
URL: [POST] {yourdomain}/api/v1/realtime/vehiclePositions
根据车辆ID删除特定车辆的车辆位置。可选地可以传递车辆标签和车牌。
URL: [DELETE] {yourdomain}/api/v1/realtime/vehiclePositions?vehicleId={VEHICLE_ID}[&vehicleLabel={VEHICLE_LABEL}][&vehicleLicensePlate={VEHICLE_LICENSE_PLATE}]
realtime/garbageCollector
有时由于应用程序错误,行程更新和车辆位置会卡住。为了安全地从您的实时数据中删除它们,您应定期调用垃圾收集器方法。此调用删除上次更新时间偏移量300秒(5分钟)之前的所有卡住的行程更新和车辆位置。您可以可选地传递自定义时间偏移量(以秒为单位)。
URL: [DELETE] {yourdomain}/api/v1/realtime/garbageCollector[?timeOffset={TIME_OFFSET_SECONDS}]
当前不支持
有些功能目前在这个版本中不支持。
- 目前,只有当时间参数在行程的原定出发时间之前时,才能找到基于频率的行程。如果时间参数指向行程开始时间之后的戳记(或在使用
byStopId
选择器时的相应车站的出发时间),则找不到行程。 - 数据库模式支持翻译,但目前还没有为它们提供选择器。由于它们使用动态字段名,自动将它们映射到其字段几乎是不可能的。一个可能的解决方案是检索所有翻译并在应用程序级别稍后映射它们。
最新更改
请参阅CHANGELOG以了解最新更改概述。
扩展和贡献
REST API设计为易于通过您的资源扩展。
扩展
要提供您自己的资源类型,您只需在/src/Controller目录中创建一个控制器类。控制器类的命名约定为{ResourceName}Controller
。(注意单数拼写!)要运行您自己的控制器,您的控制器类必须扩展BaseController类并重写getAll(...)
选择器方法。
您可以通过添加任何具有get{byYourSelector}
命名约定的方法来创建您自己的选择器方法 - 控制器将在{yourdomain}/api/v1/resourceName/byYourSelector
处可用。
如果您的控制器需要从使用POST
方法传输的正文接收数据,则您的选择器方法必须以post
开头。因此,如果存在,任何POST
请求都将分发给相应的控制器方法post{yourSelector}
。您还可以使用请求方法DELETE
在控制器上执行删除操作。相应的控制器方法必须命名为delete{yourSelector}
。
贡献
如果您想通过添加基本功能来为此项目做出贡献,我们欢迎您!请查看现有代码以适应现有的编码风格。良好的文档化的源代码也更易于阅读和审查;-)
许可协议
本项目采用MIT许可协议。有关详细信息,请参阅LICENSE。