Restful URL约定:同一资源的多个级别

问题描述

我的问题是有关以下情况下在.net核心Web API中命名路由的正确方法

这是我的问题所基于的数据库架构

enter image description here

1-我想要获取所有商店的功能,所以我有

/api/store

2-我想获得所有教授和学生的能力,所以我有

/api/student
/api/professor

3-问题

我不想检索级联数据,所以当我查询学生或老师的资源时,我有

Student :
{
  "IdStudent": 1,"FavoriteStoreId":2
}

Prof :

{
  "IdProfessor": 1,"FavoriteStoreId":2
}

因此,如果我要“ FavoriteStore”对象,则需要在第一次调用api / student / 1并检索FavoriteStoreId之后调用api/store/2

但是如果我想在一个电话中获得收藏夹怎么办?

是执行类似操作的正确方法吗?

api/student/1/store or api/student/1/favorite-store

所以我有多个可能返回商店的URL:

api/student/1/store GET student favorite store
api/professor/1/store GET professor favorite store
api/store GET all store

但所有这些都是相同的资源(-> Store table后面的相同实体)

所以我想知道这是否是个好方法

谢谢

解决方法

我认为,正确的方法是在首次调用api / student / 1并检索FavoriteStoreId之后调用api / store / 2。

由于要获取学生的FavoriteStoreId,还需要首先获取学生ID,然后获取商店ID。这是两个步骤。

如果您直接致电api / student / 1 / favorite-store,则还需要先获取学生,然后再获取商店。这也是两个步骤。

我认为没有区别。但是,如果您在第一次调用api / student / 1之后调用api / store / 2并检索FavoriteStoreId,则比创建新的api方法更好地理解了这一点。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...