我想传递一个查询参数prop=xxx.
这没用
<a [routerLink]="['/somepath', {queryParams: {prop: 'xxx'}}]>Somewhere</a>
Run Code Online (Sandbox Code Playgroud) 查询参数:http://example.com/apples?order=random&color=blue
矩阵参数:http://example.com/apples;order=random;color=blue
http://example.com/apples;order=random;color=blue/2006/archive您可以在此处阅读有关矩阵参数的更多信息:http://www.w3.org/DesignIssues/MatrixURIs.html
我的应用程序有一个资源/foo.通常,它由HTTP响应有效负载表示,如下所示:
{"a": "some text", "b": "some text", "c": "some text", "d": "some text"}
Run Code Online (Sandbox Code Playgroud)
客户端并不总是需要此对象的所有四个成员.什么是RESTful语义方式,客户端告诉服务器它在表示中需要什么?例如,如果它想要:
{"a": "some text", "b": "some text", "d": "some text"}
Run Code Online (Sandbox Code Playgroud)
应该怎么GET做?一些可能性(如果我误解了REST,我正在寻找纠正):
GET /foo?sections=a,b,d.
GET /foo/a+b+d我最喜欢的REST语义不包括这个问题,因为它简单.
/widgets代表一个可呈现的/widget/<id>资源列表是一致的,我从来没有遇到过这样的问题.GET /foo/a等,让客户端根据需要为每个组件发出请求/foo.
/foo有数百个组件且客户端需要100个组件,这可能会成为一场噩梦./foo,我必须使用Ajax,如果我只想要一个可以被抓取,由极简主义浏览器呈现的HTML页面等,这是有问题的./foo:{"a": {"url": "/foo/a", "content": "some text"}, ...}GET /foo,Content-Type: application/json并{"sections": ["a","b","d"]}在请求正文中.
JAX-RS @QueryParam和 @MatrixParam?之间的区别是什么?从文档中,queryparam和matrixparam都可以在特殊条件下定位一个资源.那么用例区别是什么?
PS:
Queryparam:
url ? key=value;
Matrixparam
url; key=value;
矩阵url表示法是创建带参数的URL的"默认",还是更好地使用"旧"表示法?和&.我对angular.io文档没有理解
localhost:3000/heroes;id=15;foo=foo
Run Code Online (Sandbox Code Playgroud)
要么
localhost:3000/heroes?id=15&foo=foo
Run Code Online (Sandbox Code Playgroud) 在Angular2中,有没有办法更新矩阵参数,但导航到同一个组件?基本上想要从一个看起来像这样的网址轻松过渡:
/search;term=paris;pageSize=24;currentPage=1;someFilter=value;
同样的事情,但在分页时更新currentPage:
/search;term=paris;pageSize=24;currentPage=2;someFilter=value;
使用router.navigate似乎并不是最佳选择,因为我必须编写大量自己的逻辑来重新构建用于navigate使用的URL (重新构建已经存在的东西).
对于踢腿和咯咯笑,我确实尝试过
this._router.navigate([this._router.url, {currentPage: this.pagination.currentPage}]);
但是(正如你所料),路由器对于当前网址上有矩阵参数这一事实是愚蠢的,所以结果不是很好.
编辑:还应该提到可能有任意数量的矩阵参数的附加键/值对,因此硬编码任何路由都是不可能的
编辑:我以后尝试使用preserveQueryParams: true像:
this._router.navigate(["..", {currentPage: this.pagination.currentPage}], {preserveQueryParams: true});
为了获得一个易于使用/可转移的解决方案,但这并没有保持路线上的矩阵参数.
更新:我已经实现了自己的逻辑来获得所需的行为,所以这里是解决方案的代码片段:
let currentParamsArr: Params = this.route.snapshot.params;
let currentParamsObj: any = { };
for (let param in currentParamsArr) {
currentParamsObj[param] = currentParamsArr[param];
}
currentParamsObj.currentPage = +pageNum; //typecasting shortcut
this._router.navigate([currentParamsObj], { relativeTo: this.route });
Run Code Online (Sandbox Code Playgroud)
这段代码循环遍历参数(因为它们位于快照中),并从中创建一个对象,然后添加/编辑我想要更新的参数,然后导航到"新"路径
但是,这并不漂亮,因为我在程序的许多地方基本上都有相同的逻辑,或者必须对路由器进行修改或提供其他一些通用方法.
我正在以这种格式调用Web服务:
HTTP://some.server/rest/resource; A = B
它有效,但这是有效的吗?我见过了; 用作替代&但从未见过这样的网址.我一直在寻找答案,但没有找到有效的答案.如果有效,这种网址的含义是什么?
我正在寻找以下用例的RESTful API设计的最佳实践:
Table1 Table2
Id1 Id1
Id2 Id2
Id3 Id3
Name Name
Table1Id1(FK to Table1)
Table1Id1(FK to Table1)
Table1Id1(FK to Table1)
Run Code Online (Sandbox Code Playgroud)
假设我有如下表1的端点:
/root/table1 (to get list of records)
/root/table2 (to get single record by primary key)
Run Code Online (Sandbox Code Playgroud)
现在我的问题是从第二个以下代表第二个网址中的复合键的最佳方式:
/root/e1/Id1/Id2/Id3
or
/root/e1?Id1=1&Id2=2&Id3=3
Run Code Online (Sandbox Code Playgroud)
假设我有如下表2的端点:
/root/table1/Table1Id1_Table1Id2_Table1Id1/table2 (to get list of records for table2 by table1).
Run Code Online (Sandbox Code Playgroud)
现在这里是我的问题,在url之上是有效的,并且在复合键的情况下是否合适?
关于此用例的良好模式的任何建议将不胜感激.
为具有复合ID的对象设计RESTful资源的最佳方法是什么?例如,假设我有一个GET /people用于获取人员记录列表的资源.一个人没有一个身份证; 相反,它由firstName,lastName和birthdate标识.我该如何设计资源以获得一个人?
我的功能看起来像这样:
@PUT
@Path("property/{uuid}/{key}/{value}")
@Produces("application/xml")
public Map<String,ValueEntity> updateProperty(@Context HttpServletRequest request,
@PathParam("key") String key,
@PathParam("value") String value,
@PathParam("uuid") String uuid) throws Exception {
...
}
Run Code Online (Sandbox Code Playgroud)
我必须修改它,因此它接受来自REST调用的无限(或许多)键值对列表,例如
@Path("property/{uuid}/{key1}/{value1}/{key2}/{value2}/{key3}/{value3}/...")
Run Code Online (Sandbox Code Playgroud)
是否可以将它们存储在数组或列表中,所以我没有列出几十个@PathParams和参数,以避免这种情况:
@PathParam("key1") String key1,
@PathParam("key2") String key2,
@PathParam("key3") String key3,
Run Code Online (Sandbox Code Playgroud) 下面的操作只检索请求中的所有书籍。这显然是一个GET操作。
从你的角度来看,做下面这两个更好(赞成/反对):
获取 - api/library/2/books/
从图书馆 2 中检索所有书籍。
GET - api/library/2/books/3/5/10/33/...../pages
POST - api/library/2/books/pages
身体:
{
"books_id": [
2,
30,
40,
20,
30
]
}
Run Code Online (Sandbox Code Playgroud)
我真的很怀疑使用POST或GET方法来实现它。如果要检索 100-200 本书,URL 上的书籍 ID 会变得非常混乱。我想在这里得到一些启示。
我正在使用 PHP 来处理 Rest 应用程序,上面的所有这些方法都是有效的。