适用于宁静服务的路由策略

时间:2013-10-10 16:40:34

标签: rest architecture asp.net-web-api restful-url

我们正在使用Web-API开展休息服务,并打破我们要遵循的路由策略。

我们获得了一些资源:

  • 等级
  • 消息
  • 作业

(作为旁注:我们计划使用Hateoas来连接资源。)

我们正在考虑控制器[动作] [Id]导致

API\Grade[?personid] (GET/POST)

API\Grade\{id}[?personid] (GET/PUT/DELETE)

API\Grade\Lastgrades\{days}[?personid] (GET) 

或使用上下文

API\Student\Grade (GET)

API\Student\Grade\{id} (GET)

API\Student\Grade\Lastgrades\{days} (GET)

AND

API\Parent\Student\{id}\Grade (GET)

API\Parent\Student\{id}\Grade\{id} (GET)

API\Parent\Student\{id}\Grade\Lastgrades\{days} (GET)

AND

API\Teacher\Student\{id}\Grade (GET/POST)

API\Teacher\Student\{id}\Grade\{id} (GET/PUT/DELETE)

API\Teacher\Student\{id}\Grade\Lastgrades\{days} (GET)

是否有充分理由将一种策略用于另一种策略?

1 个答案:

答案 0 :(得分:3)

在第一个选项中,重点是成绩,这是API旨在管理的资源 在您的第二个选项中,只需查看URL模式,就可以使用更多资源,例如教师和学生。

在不了解您的业务用例的情况下,您的问题的答案更多地与API的初始范围有关。  如果它专注于成绩而不是教师和学生,那么您只需提供API来管理“成绩”资源,这意味着您的选项-1。

稍后,如果您还需要管理“教师和学生”,则可以将选项-2添加到您的实施中。

它们没有必要相互排斥。

更新-1

角色/上下文不应该是URL的一部分。一旦每个角色登录到系统,就应该单独处理;应该已经有办法与后端中的角色相关联,例如通过会话等。

URL设计重点应放在资源上,在本例中为Grades。此外,从逻辑上讲,成绩应与学生联系,甚至与学生参加的课程相关联,我建议将其设计如下:

/api/v1/grades/students/[student-id]/

OR

/api/v1/students/[student-id]/grades/

OR

/api/v1/students/[student-id]/classes/[class-id]/grades/

这些都是可接受的解决方案,根据您的业务用例,一个可能比其他更好。

只有CRUD operations可以对这些资源采取行动才能发挥作用,例如教师可以POST / PUT / GET

/api/v1/students/[student-id]/grades/

但学生/家长只能参加GET

/api/v1/students/[student-id]/grades/

您仍然需要将角色/上下文视为整体设计的一部分,也许还需要考虑URL设计如何更有意义,具体取决于您希望如何支持每个角色将使用URL来管理资源的操作。但“上下文/角色”不应该是URL的一部分。