所以,我正在Angular中构建一个应用程序,它将在后面利用一个REST API,在Node上运行。在设计此API时我遇到了处理数据复杂性的问题,可以使用一些帮助。
以下是不同的资源。
现在,以下是应用程序可能执行的一些操作,因此API的要求是明确的。
请记住,请求自然可以是POST,GET,DELETE或PUT。现在,这是我到目前为止的地方。我只提到了URL,每次发送POST时的操作,GET,DELETE或PUT都是不言自明的。
/doctors/
/doctors/:id
/doctors/:id/patients
(返回/patient/:id
)/doctors/:id/appointments
/patients/
/patients/:id
/patients/:id/doctors
(返回/doctors/:id
)/patients/:id/appointments
现在,我对上述内容感到满意。这是我的问题。
/doctors/:id/patients/:id/appointments
/doctors/:id/appointments/:id
或/patients/:id/appointments/:id
感觉不太对劲。我觉得嵌套太多了。请帮忙。
答案 0 :(得分:3)
您的端点列表看起来不错。我想对你提出的问题可以有不同的看法。
以下是我对可以采取的措施的看法:
如何设置任务编号7的URL而不嵌套
/doctors/:id/patients/:id/appointments
?
我认为会有一系列提醒,并按如下方式定义:
/doctors/:doctorid/reminders
/doctors/:doctorid/reminders/:patientid
此外,我可以很容易地通过以上方式获得医生或患者的所有预约。特定约会怎么样? / doctors /:id / appointmentments /:id或/ patients /:id / appointmentments /:id 感觉不对。
无需将端点复杂化到该级别。如果您已经知道预约ID,为什么要通过医生或患者终点来达到这个目的?没关系,你直接通过它的集合到达项目。
/appointments/:appointmentid
另外,约会看某位患者或某位医生怎么办?
您可以利用查询参数的强大功能来处理此类问题。并非所有内容都是URL模板的一部分。可以将诸如过滤特定记录的特征添加到查询参数中。例如
/doctors/:doctorid/appointments?pantientName=
/patients/:patientid/appointments?doctorName=
那个特定日期的每位医生或患者的预约呢?
同样的事情,你可以这样:
/patients/:patientid/appointments?from=&to
或者对于非常了解的案例有特殊的终点,例如,今天的约会,本周,本月的约会:
/patients/:patientid/appointments/:year
/patients/:patientid/appointments/:year/:month
/patients/:patientid/appointments/:year/:month/:day
后者实际上可以重复使用相同的逻辑来实现一系列日期之间的约会。
答案 1 :(得分:2)
URI结构不是REST问题,因为根据统一接口约束,它必须与客户端分离。
重要的是:
如何在没有嵌套的情况下为任务编号7设计URL /医生/:ID /患者/?ID /约会
您可以映射缩小现有约会集合,如下所示:
/appointments?doctor=1&patient=1
/appointments/doctor:1/patient:1
对于特定的每个医生或患者的约会怎么样? 日期?
您可以使用日期过滤器执行此操作:
/appointments?date=2014-09-02
/appointments/date:2014-09-02