Tag: APIdevise

REST api版本控制(仅版本表示,而不是资源本身)

我看了一下API版本的最佳实践? ,但是我不太相信答案,所以我再次以更具体的例子来质疑版本控制部分。 我有两个URI(一个版本是URI的一部分,另一个没有): http://xxxx/v1/user/123 -> favored solution in discussed thread http://xxxx/user/123 我怀疑第一个链接是否expression了REST的想法。 我发现http://xxxx/v1/user/123令人困惑,因为它暗示有一天会有一个更高的api版本,像http://xxxx/v2/user/123 。 但是这在REST术语中没有意义,api版本本身就是HTTP 1.0或1.1,它已经在HTTP请求中发送了。 这个以REST资源为中心的视图与其他api接口(如SOAP或Java接口(通常在限定名称中包含api-versions))之间的差别很大。 在REST中,版本控制唯一有意义的是该资源的表示(例如添加或删除新的字段)。 这个版本控制属于内容协商的部分,如: http://xxx/user/123 + HTTP 'Accept' Header -> Content negotation through header http://xxx/user/123?v=1 -> for perma-links/hyperlinks 人们也可以争辩说,这样的版本内容协商可能是path中的URI的一部分,但是我觉得它是违反直觉的,因为你可能以同一资源的不同的URI结束,并且必须在某个时刻保持redirect。 综上所述:在REST URI中没有api版本化,只有资源表示的版本。 表示版本信息属于内容协商(作为queryParam或HTTP“接受”)。 你怎么看? 你会不同意/同意哪些事情?

RESTdevisefile upload

我需要为file upload服务创build一个REST API,允许用户: 打开一个会话 上传一堆文件 closures会话 然后,再回来做一些上一个会话中上传的文件。 为了便于处理关于每个文件的数据并处理文件本身的内容,这就是我正在考虑使用的URIscheme: /sessions/ /sessions/3 /sessions/3/files /sessions/3/files/5 /sessions/3/file/5/content /sessions/3/file/5/metadata 这将允许文件元数据从文件内容分开处理。 在这种情况下,只允许在文件内容和文件元数据上进行GET,并且更新其中任何一个,新文件必须是PUT。 这有道理吗? 如果不是的话,为什么,怎么会更好?

stream利的界面是否违反了德米特法?

维基百科关于Demeter法律的 文章说: 法律可以简单地表述为“只使用一个点”。 但是stream畅的界面的一个简单的例子可能是这样的: static void Main(string[] args) { new ZRLabs.Yael.Pipeline("cat.jpg") .Rotate(90) .Watermark("Monkey") .RoundCorners(100, Color.Bisque) .Save("test.png"); } 那么这是一起吗?

API端点语义

是一个API端点的“方法”,如https://api.foursquare.com/v2/venues/或完整的url,包括非查询string参数,如https://api.foursquare.com/v2/venues/ 5104 换句话说,这两个单独的端点还是被认为是相同的端点? http://myapi.com/somemodel/1 http://myapi.com/somemodel/2

为什么JavadateAPI(java.util.Date,.Calendar)这么乱?

由于现在大多数人都痛苦地意识到,处理日历date的Java API(特别是类java.util.Date和java.util.Calendar )是一个非常糟糕的混乱。 closures我的头顶上: date是可变的 date代表时间戳,而不是date 没有简单的方法来转换date组件(日,月,年…)和date 日历是笨重的使用,并试图将不同的日历系统合并成一个类 这篇文章总结得非常好, JSR-310也解决了这些问题。 现在我的问题是: 这些类是如何进入Java SDK的? 这些问题大部分似乎相当明显(特别是date可变),应该很容易避免。 那么这是怎么发生的? 时间压力? 还是仅仅是回想起来的问题? 我意识到这不是一个严格的编程问题,但是我会发现理解APIdevise如何错误是有趣的。 毕竟,错误总是一个很好的学习机会(我很好奇)。

GB英语还是美国英语?

如果你有一个API,而且你是一个拥有高度国际化观众的英国开发者,那么你的API应该是什么样的 setColour() 要么 setColor() (以一个简单的例子来说一个词) 总部设在英国的工程师常常对自己的“正确”拼写方式有所防范,但可以认为美国的拼写在国际市场上更为“标准”。 我猜这个问题是否重要? 其他地区的开发人员是否会拼写GB,或者通常很明显是什么意思? 应该都是美国英语吗?

以REST风格调用资源上的服务器端方法

请记住,我对REST有一个基本的了解。 比方说,我有这个url: http://api.animals.com/v1/dogs/1/ 而现在,我想让服务器让狗叫。 只有服务器知道如何做到这一点。 比方说,我想让它在CRON的工作上运行,让这只狗每隔10分钟就要吠叫一次。 这个电话是什么样的? 我有点想这样做: url请求: ACTION http://api.animals.com/v1/dogs/1/ 在请求体中: {"action":"bark"} 在你为我自己制作HTTP方法而生气之前,请帮助我,让我更好地了解如何以REST方式调用服务器端方法。 🙂 编辑澄清 有关“树皮”方法的更多说明。 以下是一些可能导致不同结构化API调用的选项: 树皮只是发送一封电子邮件到dog.email并没有logging。 树皮发送电子邮件到dog.email和增量dog.barkCount由1。 树皮创造一个新的“树皮”logging与树皮时间戳记树皮发生时。 它也使dog.barkCount增加1。 树皮运行系统命令从Github下拉最新版本的狗代码。 然后它发送一条短信给dog.owner,告诉他们新的狗码正在生产中。

为什么String.valueOf(null)抛出一个NullPointerException?

根据文档,方法String.valueOf(Object obj)返回: 如果参数为null ,那么一个string等于"null" ; 否则,返回obj.toString()的值。 但是,当我尝试这样做时, System.out.println("String.valueOf(null) = " + String.valueOf(null)); 它会抛出NPE呢? (如果你不信,就自己试试!) 线程“main”java.lang.NullPointerException中的exception 在java.lang.String。(Unknown Source) 在java.lang.String.valueOf(未知来源) 这是怎么发生的? 文件是在骗我吗? 这是Java中的一个主要错误吗?