今天我听到有人说SOAP和XML就像一个类型安全的'定义API的方式,因为消息格式符合WSDL规范并且可以进行验证。
这与RESTful API形成对比,其中消息格式无法验证(有没有办法验证它?),因为它是动态输入的#34;喜欢Javascript。
认为打破SOAP API并不像RESTful那样容易 - 我想因为您需要明确更改wsdl规范,而您可以更轻松地更改REST JSON API?
技术上是否正确?
答案 0 :(得分:0)
与JSON相比,SOAP是可验证的还是“类型安全的”API格式?
这取决于您对"type safe"的理解,但在此问题的上下文中,我必须说“类型安全”与您通过SOAP XML或REST JSON发送数据的方式无关。 XML并不比JSON更“安全”,反之亦然。
我不会提及XML和JSON之间的相同点和不同点,你会发现很多在线资料,但(简单来说)它们都是以文本格式表示数据的方式。我们采用Person
类型并以两种方式表示John Doe
:
<person>
<firstName>John</firstName>
<lastName>Doe</lastName>
</person>
{
"firstName": "John",
"lastName": "Doe"
}
它们都相同但表示不同。如果将它们分别发送到SOAP和REST服务,并且该服务(例如,期望还有强制id
属性),则两者都将失败。它们不会是“类型安全的”,因为它们不符合服务所期望的实际类型,它还包含id
。
[...] SOAP和XML类似于定义API的“类型安全”方式,因为消息格式符合WSDL规范并且可以进行验证。
这与RESTful API形成对比,其中消息格式无法验证[...]
WSDL是一种描述SOAP Web服务的方法,就像WADL(if you care for that thing)是一种描述REST服务的方式。两者都说服务期望作为输入并作为输出发出。交换的数据应该符合WSDL / WADL,这实际上就是这个想法,但不是WSDL / WADL强制数据是“类型安全的”,而是服务本身。
SOAP服务必须验证XML数据,就像RESTful服务必须验证JSON数据一样。 SOAP服务并不比REST服务更好,因为它使用XML而不是JSON。顺便说一句,JSON只是一种表示,你可以改为交换XML,但这并不会让它突然“类型安全”。 服务需要确保数据有效且“类型安全”。
认为打破SOAP API并不像RESTful那样容易 - 我想由于您需要显式更改wsdl规范,而您可以更轻松地更改REST JSON API ?
事实上它break a SOAP API和RESTful一样容易。如果对WSDL进行了重大更改,那么会破坏从WSDL生成的客户端。对于WADL生成的REST客户端也会出现此问题,这完全相同。 RESTful客户端should be more flexible in fact,但突破性变化是一个重大变化。
所以简而言之,不,与JSON相比,SOAP不是更可验证或“类型安全”。类型安全是由Web服务强制执行的,无论是SOAP还是REST,另一种方式只是草率。服务器应始终确保客户端发送有效数据。