Web services 在RESTfulWebAPI中使用HTTPURI作为资源标识符
通常检索用户使用的资源时:Web services 在RESTfulWebAPI中使用HTTPURI作为资源标识符,web-services,rest,uri,Web Services,Rest,Uri,通常检索用户使用的资源时: GET http://ws.mydomain.com/resource/123212 但是如果您的项目ID是HTTP URI怎么办 GET http://ws.mydomain.com/resource/http://id.someotherdomain.com/SGX.3211 浏览器用一个斜杠替换两个斜杠,请求变成: GET http://ws.mydomain.com/resource/http:/id.someotherdomain.com/SGX.321
GET http://ws.mydomain.com/resource/123212
但是如果您的项目ID是HTTP URI怎么办
GET http://ws.mydomain.com/resource/http://id.someotherdomain.com/SGX.3211
浏览器用一个斜杠替换两个斜杠,请求变成:
GET http://ws.mydomain.com/resource/http:/id.someotherdomain.com/SGX.3211
这是行不通的
URI编码“”部分会导致HTTP 400错误请求
是否有处理此问题的最佳实践
编辑: 当然,如果我们需要(我现在不需要)以表格形式提出请求: 资源/ID/collections/ID 所有的ID都是HTTP URI,一切都会失控。。。也许可以这样做,解析大括号内的内容:
资源/{http://id...}/收藏/{http://id...}
对另一个系统的URI进行编码,然后将该值作为查询参数传递:
GET http://ws.mydomain.com/resource?ref=http%3A%2F%2Fid.someotherdomain.com%2FSGX.3211
外观难看,但没有人说REST体系结构中使用的URI必须美观。:)
顺便说一下,GET在发送时实际上是这样的:
GET /resource?ref=http%3A%2F%2Fid.someotherdomain.com%2FSGX.3211 HTTP/1.1
Host: ws.mydomain.com
更新:显然您不再需要在查询组件中编码“/”和“?”。发件人:
字符斜杠(“/”)和问号(“?”)可以表示数据
在查询组件中。要当心一些老的、错误的
当这些数据被用作数据时,实现可能无法正确处理这些数据
相对引用的基本URI(第5.1节),显然因为它们无法区分查询数据和路径数据 寻找层次分隔符。但是,由于查询组件是 通常用于以“键=值”的形式携带识别信息 对和一个常用值是对另一个URI的引用 对于可用性来说,避免使用百分比编码有时会更好 人物 所以你可以合法地这样做:
GET /resource?ref=id.someotherdomain.com/SGX.3211 HTTP/1.1
Host: ws.mydomain.com
我假设另一个系统的URI足够稳定,可以使用,并且不受您的影响?您好,它们与任何其他唯一(数字)标识符一样稳定。这可能是我最终必须做的,但它不完全是“重新定义的”——我一点也不介意。让我们看看是否还有其他建议。这个违反REST的约束是什么,不能使这个RESTful呢?