我正在通过将应用程序从紧密耦合的PHP实现转换为RESTful实现。 (目前的应用程序在http://coinvault.tanichols.com)如何最好地构建RESTful API端点
该应用程序保持硬币(国家宿舍,总统美元等)和用户的集合。用户还可以“收集”硬币,表示为用户和硬币表之间的多种关系。
我创建的动词和端点的组合如下表:
GET /coins - Get all coins
POST /coins - Create a new coin
GET /coins/CID - Get a coin
PUT /coins/CID - Update a coin
DELETE /coins/CID - Delete a coin
GET /users - Get all users
POST /users - Create a new user
GET /users/UID - Get a user
PUT /users/UID - Update a user
DELETE /users/UID - Delete a user
什么我遇到的麻烦是从多对多表暴露信息的正确/接受的方式。例如,我可以使用下面的一组路线:
GET /users/UID/coins - Get coins for a user
POST /users/UID/coins - Create a coin for a user
GET /users/UID/coins/CID - Get a specific coin for a user
PUT /users/UID/coins/CID - Update a specific coin for a user
DELETE /users/UID/coins/CID - Delete a specific coin for a user
或者我可以颠倒这:
GET /coins/CID/users/UID - Get a specific coin for a user
PUT /coins/CID/users/UID - Update a specific coin for a user
DELETE /coins/CID/users/UID - Delete a specific coin for a user
Q1:是这些优于其他的呢?是否有规划这些类型的路线的标准或可接受的方式?
我也可以用下面的路线和过滤器公开此功能:
GET /coins?user_id=1 - Get all coins belonging to a user
Q2:这是一个更好的办法,还是坏?这是否会给/币路线增加不必要的“重量”?
最后,出于报告和分析目的,我希望提供对某些聚合的访问权限,例如特定硬币被收集了多少次。对于这一个,我完全丧失了从哪里开始,或者如何解决这个问题。
问题3:如何通过RESTful API公开此类聚合?什么是有意义的途径?
谢谢@arnaud,你对第三个问题的回答确实为我解决了一些问题。我一直忘记我可以将任何我想要的数据返回给响应,而不仅仅是表中的内容。例如,我可以在JSON中发送一个totalCollected值,即使这不在表格中。谢谢你清理那个。 – ThomasNichols89