您可以使用框架为您完成很多工作,但在后台发生的事情并不神奇。在某种程度上,URI 映射到一些数据库表。它们不是指某个目录结构,而是试图解释资源之间的层次关系。
例如,假设我们正在为一所大学建模。数据库中的元素存储在Faculties或Courses两个表之一中。Faculties 表由描述法学院、医学院等的行组成。它有一个独特的Faculty_id列,然后是用于描述我们需要的任何内容的列。Courses 表有一个唯一的course_id列和一个外键Faculty_id列,以告知该课程属于哪个学院。
设计此 API 的 RESTful 方式可能是
/faculties
获取所有院系的列表,检索SELECT * FROM Faculties
/faculties/2
获取有关某个学院的信息,使用检索SELECT * FROM Faculties WHERE faculty_id=2
/faculties/2/courses
获取属于某个学院的所有课程,检索SELECT * FROM Courses WHERE faculty_id=2
/faculties/2/courses/15
检索某个课程,如果它确实属于教师 2,则检索SELECT * FROM Courses WHERE faculty_id=2 AND course_id=15
其具体实现取决于您选择的编程语言(可能还有框架),但在某些时候,您需要选择应该如何查询数据库。这并不明显。你需要仔细计划它才有意义!
来自数据库的结果当然必须以某种方式编码,通常是 XML 或 JSON(但其他表示形式也一样好,尽管可能不那么常见)。
除此之外,您还应该确保正确实现这四个动词,以便它们匹配 SQL 命令(GET
= SELECT
,POST
= INSERT
,PUT
= UPDATE
,DELETE
= DELETE
),正确处理编码协商,返回正确的 HTTP 响应代码以及所有其他预期的东西一个 RESTful API。
作为最后一条建议:如果你能巧妙地做到这一点,那么你设计移动应用程序就会变得容易得多。我真的不能强调这一点。例如,如果您在POST
请求中返回现在在数据库中查看的完整条目,您可以立即使用正确的 ID 将其存储在手机上,并且您可以使用相同的代码来呈现内容,如果它有已使用GET
请求下载。此外,在您知道该请求是否成功之前,您不会通过过早更新来欺骗用户(手机失去连接很多)。
编辑:在评论中回答您的问题:创建 API 可以被视为一种艺术形式,并且可能不应该在设计阶段涉及任何编码。API 应该是有意义的并且不依赖于特定的实现(即不同的数据库选择不应该影响您的 API)。您的下一个任务将是在 API 的人类可读结构和您的数据库之间建立联系(不管它是关系的还是其他的)。所以是的,你需要做一些翻译,但我看不出查询字符串对你有什么帮助。典型的结构是api.my.website/collection/element/collection/element
。查询可用于过滤。例如,您可以编写example.com/resource?since=2012-06-01
以从“资源”集合中检索元素的子集,用唯一的 ID 表达。
根据我的理解,您认为传入的请求必须始终根据 PHP 和 HTTP 服务器的工作方式转到单独的文件。事实并非如此。您可以配置您的 Web 服务器以将每个请求路由到单个 PHP 文件,然后解析$_SERVER['REQUEST_URI']
. 根据您选择的 HTTP 服务器,您的里程可能会有所不同,但这基本上是您想要做的。
通过谷歌搜索,我找到了 PHP 框架列表,但我不知道其中任何一个。不过,还有其他人,我最近也听到有人提到Apify,尽管我也不能告诉你太多。PHP 可能是实现 API 的更常见的选择之一。然而,据我所知,cURL是一个仅用于连接其他网站的库/工具。您当然可以使用它的命令行版本来调试您的 API,但我认为您在服务器端不会有太多用处。