我正在将一个SOAP WCF服务移植到REST。到目前为止,我发现接收复杂类型作为响应几乎不需要任何东西。但是,我的问题是请求也是复杂类型。它有2个字段,其中一个是字符串,另一个是另一个复杂类型的列表。
我想把它变成WebGet,因为它基本上是一个搜索方法,它会询问某些参数并返回结果。
我应该怎么做呢?什么是不推荐的?
请注意,我在WCF方面没有太多经验,如果我错过了一些明显的东西,请道歉。
答案 0 :(得分:0)
如果要符合REST约定但保持相同的请求结构,则可能需要序列化复杂类型数组,对其进行编码,并将其作为参数传递。这可能会生成很长的URL,这可能是个问题。使用POST更实用,但正如@Aron所说,这与REST不一致,因为POST只应用于更新,而不是查询。
我建议你不要试图复制SOAP请求结构,而是考虑这个服务正在做什么,并以一种可以整齐地适应参数的方式重新构思输入选项。如果你将这个界面暴露给第三方,那么无论你如何表达它们,它们都会被一系列复杂类型所困惑。
答案 1 :(得分:0)
根据您的反馈意见并考虑到您无法控制实际工作的课程,这是我的建议:
使用帖子到该端点,即复杂查询。确实,它不遵循休息信,但它更接近于使用https动词,没有人应该为你敲门。
您还应该考虑为旧SOAP体系结构中的方法定义单独的端点,减少故障点。这种方法更接近RPC,远程过程调用,但这比POX更好,简单的旧xml就是SOAP。
希望这会有所帮助,顺便说一句,如果你阅读Fielding关于REST的论文,那么在你实现超媒体之前,你还不是完全的REST,但这是一个自以为是的主题。