我正在尝试一个简单的Web服务示例,即使我extension=php_soap.dll在php.ini文件中取消注释,我也会收到此错误:
致命错误:在第2行的C:\ Program Files(x86)\ EasyPHP-5.3.9\www\server.php中找不到类'SoapClient'
我不是任何安全专家,但我赞成创建REST风格的Web服务.
在创建需要使其传输的数据安全的新服务时.我们已经开始讨论哪种方法更安全 - 使用HTTPS的REST或使用WS-Security的SOAP WS.
我的印象是我们可以使用HTTPS进行所有Web服务调用,这种方法是安全的.我看待它的方式是,"如果HTTPS对银行和金融网站来说足够好,那对我来说已经足够了".同样,我不是这个领域的专家,但我认为这些人对这个问题已经相当认真,并且对HTTPS感到满意.
同事不同意并说SOAP和WS-Security是唯一的出路.
网络似乎全面都在这上面.
也许这里的社区可以权衡各自的利弊?谢谢!
目前正在做一些考试,我正在努力解决一些概念.这些都在我的笔记中被"提及",但我并不真正理解它们是如何联系在一起的.据我所知:
SOA - 使服务使用者/提供者进行通信的解决方案.(据我所知,这是其他一切的总称)
WSDL - 描述提供者服务的语言.
SOAP - 服务用于发送消息的XML协议"包装器".与WSDL一起使用以提供参数?
REST - 在功能上类似于SOAP但避免使用XML的设计模式?(真的不确定这一个)
JSON - 使用javascript的XML的替代品?(也不确定这一个)
在互联网上环顾四周似乎没有明确定义所有这些是什么以及它们如何相互关联.
尝试创建一个C#客户端(将作为Windows服务开发),将SOAP请求发送到Web服务(并获取结果).
从这个问题我看到了这段代码:
protected virtual WebRequest CreateRequest(ISoapMessage soapMessage)
{
var wr = WebRequest.Create(soapMessage.Uri);
wr.ContentType = "text/xml;charset=utf-8";
wr.ContentLength = soapMessage.ContentXml.Length;
wr.Headers.Add("SOAPAction", soapMessage.SoapAction);
wr.Credentials = soapMessage.Credentials;
wr.Method = "POST";
wr.GetRequestStream().Write(Encoding.UTF8.GetBytes(soapMessage.ContentXml), 0, soapMessage.ContentXml.Length);
return wr;
}
public interface ISoapMessage
{
string Uri { get; }
string ContentXml { get; }
string SoapAction { get; }
ICredentials Credentials { get; }
}
Run Code Online (Sandbox Code Playgroud)
看起来不错,任何人都知道如何使用它,如果这是最好的做法?
所以,我正在浏览一些关于创建REST API的文章.其中一些建议使用所有类型的HTTP请求:比如PUT DELETE POST GET.我们将创建例如index.php并以这种方式编写API:
$method = $_SERVER['REQUEST_METHOD'];
$request = split("/", substr(@$_SERVER['PATH_INFO'], 1));
switch ($method) {
case 'PUT':
....some put action....
break;
case 'POST':
....some post action....
break;
case 'GET':
....some get action....
break;
case 'DELETE':
....some delete action....
break;
}
Run Code Online (Sandbox Code Playgroud)
好的,授予 - 我对Web服务还不太了解(还).但是,通过常规或(包含方法名称和所有参数)接受JSON对象并不是更容易,然后也以JSON响应.我们可以通过PHP轻松地序列化/反序列化,并且可以使用该数据执行任何操作,而无需处理不同的HTTP请求方法.POSTGETjson_encode()json_decode()
我错过了什么吗?
更新1:
好的 - 在深入研究各种API并学习了很多关于XML-RPC,JSON-RPC,SOAP,REST后,我得出结论,这种类型的API是合理的.实际上堆栈交换几乎在他们的站点上使用这种方法,我认为这些人知道他们正在做什么Stack Exchange API.
Delphi过去常常包含一个用于Web服务的demos文件夹,但似乎不再包含这个.
我刚刚尝试了Delphi 7演示项目(SOAPDMServerWAD一个几乎没有UI的服务器,并且SOAPDMClient)并且无法让它们运行,即使在Delphi 7中也是如此.
如果有人在Delphi XE或Delphi 2010中做过类似的演示工作,与旧版SOAPDMServerWAD+SoapDMClient演示相同,在Delphi XE中工作,并且至少具有来自Delphi SOAP Server应用程序向导的最小UI,那将是完美的.
更新:该演示一直出现在Delphi 2010上,但使用现已废弃的WAD(web-app-debugger),我试图将它移植到新的Indy runtime/web-app-development-harnessing-code,但我似乎无法让它工作.演示运行,但服务器没有用户界面,并且似乎没有运行任何HTTP服务器(使用常规Web浏览器,通过http://localhost:port/网址测试.顺便说一下,尝试使用Google搜索演示,此网址出现,并且我问不到一个小时前.那可怕,谷歌.
Update2请参阅下面的我自己的答案,工作代码即将推出一个链接.
我已经实现了两个REST服务:Twitter和Netflix.两次,我都在努力寻找将这些服务公开为REST而不是SOAP的决策所涉及的用途和逻辑.我希望有人能够让我知道我所缺少的内容并解释为什么将REST用作这些服务的服务实现.
实现REST服务比实现SOAP服务花费的时间更长.所有现代语言/框架/平台都存在用于读取WSDL并输出代理类和客户端的工具.实现REST服务是手工完成的 - 通过阅读文档来实现这一点.此外,在实现这两个服务时,您必须"猜测"管道中将返回的内容,因为没有真正的架构或参考文档.
为什么要编写一个返回XML的REST服务呢?唯一的区别是,使用REST,您不知道每个元素/属性所代表的类型 - 您可以自己实现它,并希望有一天字符串不会出现在您认为总是为int的字段中.SOAP使用WSDL定义数据结构,因此这是一个明智的选择.
我听说过使用SOAP,你有SOAP信封的"开销".在这个时代,我们真的需要担心少数几个字节吗?
我听说过用REST可以将URL弹出到浏览器中并查看数据.当然,如果您的REST服务使用简单或无需身份验证.例如,Netflix服务使用OAuth,它要求您在提交请求之前对事物进行签名和编码.
为什么我们需要每个资源的"可读"URL?如果我们使用工具来实现服务,我们真的关心实际的URL吗?
我想在Python中使用基于WSDL SOAP的Web服务.我查看了Dive Into Python代码,但SOAPpy模块在Python 2.5下不起作用.
我已经尝试使用肥皂水其中工程部分,但与某些类型的中断(suds.TypeNotFound:类型未找到:"项目").
我也看过Client,但这似乎不支持WSDL.
我看过ZSI,但看起来很复杂.有没有人有任何示例代码?
WSDL是https://ws.pingdom.com/soap/PingdomAPI.wsdl,可以与PHP 5 SOAP客户端一起使用.
我将学习RESTful Web服务(最好说我必须这样做,因为它是CS硕士学位课程的一部分).
我在维基百科上阅读了一些信息,我还在Sun Developer Network上阅读了一篇关于REST的文章,我发现这不是一项简单的技术,有一些用于构建RESTful应用程序的特殊框架,而且它经常与SOAP Web服务和程序员应该了解何时使用SOAP以及何时REST可能是很好的方法.
我记得几年前SOAP很受欢迎(时尚?),而'SOAP'项目必须出现在每个好的简历中.但在实践中,它很少用于实现非常简单的目的.
在我看来,REST是另一个"时尚的最后一句话"(或者我完全错了,因为我在实践中从未见过REST).
你能给我一些例子,说明应该使用REST吗?为什么我们不能在没有REST的情况下做同样的事情(或者为什么我们应该花更多的时间在没有REST的情况下做同样的事情)?
UPD:不幸的是,在第一次评论中,我看不到任何可以引起我注意的具体论点.让我觉得REST是很棒的技术!
我希望看到这样的答案:
我正在开发另一个复杂的HelloWorld应用程序,我们需要传输大量/微小的数据,我向我的同事提出了REST解决方案:
- 哦,该死的!Jonny,我们当然应该使用REST来实现这个应用程序!
- 是的,Billy,我们可以使用REST,但我们最好使用SOAP.相信我,因为我对开发HelloWorld应用程序有所了解.
- 但SOAP是上个世纪的老式技术,我们可以使用更好的技术.
- 比利,你准备花3天时间试验REST吗?我们可以在2小时内使用SOAP做到这一点.
- 是的,我确信我们将花费更多的时间来实现相同的安全性/性能/ /可扩展性/其他任何与SOAP相关的东西.我确信HelloWorld应用程序应该只使用REST开发.
soap ×10
rest ×6
web-services ×5
json ×2
php ×2
wsdl ×2
api ×1
architecture ×1
c# ×1
delphi ×1
delphi-xe ×1
delphi-xe2 ×1
fatal-error ×1
python ×1
security ×1
soa ×1