Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 在RESTfulWebAPI中使用HTTPURI作为资源标识符_Web Services_Rest_Uri - Fatal编程技术网

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呢?