我试图围绕解决基于REST的API中的概念的最佳方式.不包含其他资源的平面资源没有问题.我遇到麻烦的地方是复杂的资源.
例如,我有一本漫画书的资源.ComicBook上有如各种属性author,issue number,date,等.
漫画书也有一份1..n封面清单.这些封面是复杂的对象.它们包含大量关于封面的信息:艺术家,日期,甚至是封面的64位编码图像.
对于GET上ComicBook我可以回相声,和所有的封面,包括他们的base64'ed图像.获得一部漫画可能不是什么大不了的事.但是假设我正在构建一个客户端应用程序,希望在表格中列出系统中的所有漫画.
该表将包含ComicBook资源中的一些属性,但我们当然不希望显示表中的所有封面.返回1000本漫画书,每本漫画书都有多个封面,这将导致大量数据流过网络,在这种情况下,最终用户不需要这些数据.
我的直觉是制作Cover资源并ComicBook包含封面.所以现在Cover是一个URI.GET漫画书现在可以使用,而不是Cover我们为每个封面发回一个URI 的巨大资源,客户可以根据需要检索封面资源.
现在我在创建新漫画方面遇到了问题.当我创建一个时,我肯定想要创建至少一个封面Comic,事实上这可能是一个商业规则.
所以现在我卡住了,我要么强制客户端通过先提交给执行业务规则Cover,获得URI为盖,然后POST荷兰国际集团一个ComicBook与URI列表,或者我POST就ComicBook需要在寻找不同的资源比它吐出出.传入的资源是POST和GET深拷贝,其中传出的GETs包含对依赖资源的引用.
Cover在任何情况下,资源可能都是必要的,因为我确信作为客户,我想在某些情况下解决覆盖方向问题.因此,无论依赖资源的大小如何,问题都以一般形式存在.一般来说,如何处理复杂的资源而不强迫客户只是"知道"这些资源是如何组成的?
我在编程语言中搜索了API的定义,但我仍然觉得很难理解.
任何人都可以用简单的外行人的话来建议我:
我在一些文章中读到,几乎从不使用原始指针.相反,它们应始终包含在智能指针内,无论是作用域还是共享指针.
但是,我注意到像Qt,wxWidgets和像Boost这样的库这样的框架永远不会返回也不会期望智能指针,就好像它们根本就没有使用它们一样.相反,他们返回或期望原始指针.有什么理由吗?当我编写公共API时,我应该远离智能指针,为什么?
只是想知道为什么许多重大项目似乎避免使用智能指针.
是否有一些单行桥接方法将给定的枚举转储到java.util.List或java.util.Set?
某些内置类似Arrays.asList()或Collection.toArray()应该存在的东西,但我无法在IntelliJ调试器的评估窗口中找到它(以及Google/SO结果).
所以我对E*TRADE感到非常厌恶,作为一名开发人员,我很乐意找到一个提供API的在线经纪人.能够编写我自己的交易工具,甚至修改现有的交易工具会很棒.
根据我迄今为止的研究,我只找到了一个选项.Interactive Brokers提供多语言API(Java/C++/ActiveX/DDE),并且具有相当不错的佣金率.我想确保没有任何其他选择,我应该考虑.有任何想法吗?
更新:根据目前为止的答案,这是一个快速列表......
为什么要为您的Django应用程序公开API,为什么要使用其中一个?
所以,我正在浏览一些关于创建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.
什么是最佳HTTP响应代码不报告200(一切正常)但输入错误?
比如,你向服务器提交一些数据,它会回应你的数据是错误的
使用500看起来更像服务器问题
使用200警告/错误响应文本是坏的(允许缓存,一切都不好)
使用204和返回任何东西,可能是好的(但很好支持?)如果请求的路径(脚本)可用,则
使用404错误在适当的地方