Java 设计具有不同响应参数但请求相同的RESTAPI

Java 设计具有不同响应参数但请求相同的RESTAPI,java,web-services,rest,http,jersey,Java,Web Services,Rest,Http,Jersey,我想设计RESTAPI,在这里,对于同一个请求,可以使用不同的路径变量使用不同的响应参数。 例如: URI : /mybook/{key} 场景1:/mybook/page1 答复: { a: "val1", b: "val2" c: "val3" } { d: "value4", e: "value5" f: "value6" } { g: "value7", h: "value8" i: "value9" } 场

我想设计RESTAPI,在这里,对于同一个请求,可以使用不同的路径变量使用不同的响应参数。 例如:

URI : /mybook/{key}
场景1:
/mybook/page1
答复:

{
    a: "val1",
    b: "val2"
    c: "val3"
}
{
    d: "value4",
    e: "value5"
    f: "value6"
}
{
    g: "value7",
    h: "value8"
    i: "value9"
}
场景2:
/mybook/page2
答复:

{
    a: "val1",
    b: "val2"
    c: "val3"
}
{
    d: "value4",
    e: "value5"
    f: "value6"
}
{
    g: "value7",
    h: "value8"
    i: "value9"
}
场景3:
/mybook/page3
答复:

{
    a: "val1",
    b: "val2"
    c: "val3"
}
{
    d: "value4",
    e: "value5"
    f: "value6"
}
{
    g: "value7",
    h: "value8"
    i: "value9"
}
可以像上面那样创建它吗?
它应该是3个独立的API还是包含所有请求参数的单个API?

您可以使用一个API来实现这一点,这是问题的一部分。我看不出场景2和场景3之间有什么区别。有吗?

是的,有可能

如果您在3个单独的API或一个单独的API中执行,那么技术上没有区别。如果有功能上的差异,我会将它们分开


问候

如果您认为页面是一种资源,而您只有一本书,那么您可能会将API设计为:

因此,您的场景将更改为:

/mybook/pages/1
/mybook/pages/2
/mybook/pages/3
/books/my?page=1
/books/my?page=2
/books/my?page=3
否则,如果
书籍
是您的资源,而页面只是书籍的视图,那么您可能会将API设计为:

因此,您的场景将更改为:

/mybook/pages/1
/mybook/pages/2
/mybook/pages/3
/books/my?page=1
/books/my?page=2
/books/my?page=3

您需要了解的是


不同场景的响应参数不同。我确信您指的是响应值。您可以在一个RestController中使用Srping完成所有操作。不,我指的是响应参数。我已经编辑了我的问题,让它更容易理解。什么是响应参数?不管怎样,如果您愿意,可以将其用作单个API。如果我的第1、2、3页有完全不同的响应参数,该怎么办?响应参数是什么意思?你能举个例子吗?我想我明白了。只要客户知道他可能得到什么和什么不好。在您的示例中,他可能得到
a
,也可能得不到
a
。但如果他知道他可能得到什么:
a
b
或<代码>我他能处理这件事。也许在你的情况下:如果你得到
a
c
,那么我保证你也得到
b
。这将是一个客户可能要处理的合同。我来这里是想知道是否所有针对特定路径的帖子的API响应都必须包含相同的参数,无论它们是否相关。假设您有一个可以处理汽车、卡车或摩托车的车辆的显示url,并返回车辆的规格。问题是,我是否必须将摩托车的“行李箱空间”参数包含为null或false(以保留结构,无论类型如何),或者我是否可以完全忽略它(希望用户知道他们将得到响应的车辆类型)?这在REST文档中有规定吗?如何根据页面创建不同的响应?这里有这么多URI和API设计相关的问题,所以这主要是基于观点的。没有对错之分,因此这完全取决于你想如何建模。然而,基于samle JSON(或实际问题),这与REST几乎没有任何关系,因为API的目的可能不同于将客户机与API分离的实际REST原则。