java - Spring Rest 编码的最佳实践是什么?基于 API 和基于名称的 API

标签 java rest spring-mvc spring-restcontroller spring-rest

让我们考虑下面的 API。

/school/{schoolId or schoolName}
/school/{schoolId or schoolName}/students/{studentId or studentName}

我必须开发上述 API。在 spring REST 中实现这一目标的最佳方法是什么?我可以简单地以字符串形式获取 URL 路径变量,并检查它是 id 还是名称,然后对其进行处理。

但是还有其他更好的解决方案吗?

最佳答案

房间里有一头大象,学校名称或学生姓名不唯一。所以不建议用它来代替id,不然会烧手的。

  1. /school/{schoolId or schoolName}

我会把它分成两个端点

1。/学校s/{schoolId}

如果找到,返回学校实体

HTTP-200
{
  "id" : "id-123",
  "name" : "worlds best school ever",
  "address" : "123 somestreet, some city, some state"
} 

如果没有找到

HTTP 404 and an empty body

2。/schools?name="worlds best school"(其他可选内容,例如排序、分页等)

如果每个搜索条件至少找到一个实体

HTTP-200
[
    {
      "id" : "id-123",
      "name" : "worlds best school ever",
      "address" : "123 somestreet, some city, some state"
    }
]

如果根据搜索条件找不到实体

HTTP-200
[]
  1. /school/{schoolId or schoolName}/students/{studentId or studentName}

这就引出了一个问题,一个学生是否属于多个学校,我不这么认为。如果是这种情况,/school/{schoolId 或 schoolName} 就是不必要/冗余的信息。如果是这样,我会将其更改为

1。/学生s/{studentId}

如果找到

HTTP-200
{
  "id" : "studentid-345",
  "name" : "Albert Einstein",
  "school_id" : "id-123"
} 

如果没有找到

HTTP 404 with empty body

2。/students?name="Albert Einstein"(其他可选内容,如排序方式、分页等)

如果每个搜索条件至少找到一个实体

HTTP-200
[
    {
      "id" : "studentid-345",
      "name" : "Albert Einstein",
      "school_id" : "id-123"
    }
]

如果根据搜索条件找不到实体

HTTP-200
[]

关于java - Spring Rest 编码的最佳实践是什么?基于 API 和基于名称的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51991701/

相关文章:

java - Java 中内部锁定提供的内存可见性保证?

java - 在页面加载 jsp 上运行方法

javascript - 在 Post API 调用正文中动态传递参数

php - paypal/rest-api-sdk-php PHP简单示例

java - Eclipse Neon.2 : Unable to add Gradle Buildship 中的 Spring 启动器插件问题

spring - 带变量的 thymeleaf 绝对 URL

java - 这两种初始化简单数组的方法之间的区别

java - 如何获取在 MenuButton 中单击的 MenuItem 的名称

php - Paypal PHP REST API - 结账时不显示付款金额

java - Spring Security 中 Role 和 GrantedAuthority 的区别