问题标签 [api-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
376 浏览

c# - 结构数组或每个属性都有数组的结构

在设计 API 时,我可能希望将详细信息(例如正在运行的进程)保存到我自己的自定义结构中。但是,如果我要为超过 1 个进程执行此操作,这意味着我需要多个结构,我应该有一个结构数组还是一个结构,其中每个属性都有一个数组(例如 startTime、processName 和我的其他进程属性)有兴趣)。

哪种方式对性能更好,对 api/类库更好?

谢谢

0 投票
2 回答
3174 浏览

architecture - 架构中粗粒度/细粒度的定义

在谈论 API 时,经常使用术语“粗粒度”或“细粒度”。这些是什么意思/有什么例子吗?

谢谢

0 投票
4 回答
86 浏览

java - 什么名称应该有返回嵌套对象数量的方法?

假设我们有类 Gallery 和 Image。一个画廊中可以有许多图像。

图库应该有一些返回嵌套图像数量的方法。我的建议:

我在不同的 API 中看到了这 3 个建议中的每一个的示例(当然还有另一个名词,甚至没有它,比如size ()Collections API 中的方法)。

你更喜欢什么,为什么?(我反对的一个想法countImages ()是这个名字会让用户认为这个方法做了一些复杂的计算。)

0 投票
8 回答
298 浏览

java - 建议我为 API 方法取一个更好的名称

介绍:

我正在开发一个 API,它提供对 Picasa、Flickr 和其他一些图像服务的访问。

我有一个 WebAlbum 类(它提供对嵌套照片、相册(如果允许)和一些元信息的访问)。

我的 API 不仅允许用户阅读专辑,还允许他们创建新专辑。在一般情况下,为了创建新专辑,API 用户应该使用工厂方法,该方法创建专辑然后调用该方法WebGallery#addAlbum (newAlbum)

但是 Flickr 不允许创建空相册,它需要在任何新相册中至少有一张预定义的照片(可能是为了制作漂亮的相册预览)。在 Flickr 术语中,第一张照片称为Primary Photo. 所以为了给 Flickr 创建一个相册,用户应该使用工厂方法,然后将图像添加到新相册,然后调用WebGallery#addAlbum (newAlbum).

问题:

目前 WebAlbum 类有这个方法

我不能留下这个名字,因为 PrimaryPhoto 只是一个 Flickr 术语。我可以将其更改为

请建议一个具有相同含义的较短名称。

0 投票
1 回答
66 浏览

api - 限制性 API(对客户端用户施加限制)

我正在编写一个 API,并且遇到了以下模式:

我的 API 将强制客户端用户写他/她的内容。该代码必须通过使用不同的凭据登录/注销来测试门户上的 x 个站点。我不能依赖其他开发人员编写他/她自己的登录代码(这将是通用代码)的机会,所以我编写了一个带有私有构造函数的抽象类来实现登录和注销方法,以及主要测试方法(用户必须重写它才能填充 0.

我还没有看到一个 API 会施加这样的限制,但这是团队的 API。

我在正确的轨道上吗?

0 投票
2 回答
959 浏览

eclipse - Why eGet in EMF returns Object rather than EObject?

I am working on some code using the EMF framework in Java, but it is really hard to use, e.g. I cannot implement OCL-like query API on top of EMF which would be type-safe.

One of the reasons is that eGet() for a EStructuralFeature returns just an Object, not EObject. So anything I would write must use much of null checking, type checking and type casting which is unsafe, not performant and cannot be generalized in a reusable way.

Why doesn't EMF generate dummy implementations with EObject wrappers for arbitrary Object value?

Implementing the EObject and hence the EClass interfaces even with simple throw UnsupportedOperationException is really a pain (the APIs are too big). The same holds for the eContainer() method which makes navigating the model upwards painful.

0 投票
2 回答
2959 浏览

json - 用于检索摘要信息的 REST api 设计

我有一个场景,其中我有 REST API 来管理我们将称为组的资源。群组在概念上类似于 Google 群组中的讨论论坛。

现在我有两个 GET 访问方法,我认为它们需要单独的表示。

第一种 GET 访问方法检索有关组的最少量信息。给定一个group_id它应该返回最少量的信息,例如

第二种 GET 访问方法检索本质上更具统计性的摘要信息,例如:

我想分离这些数据访问方法,我目前正在计划这种设计:

只有后者会返回关于组的统计信息。你怎么看待这件事 ?

0 投票
2 回答
143 浏览

http - 使用 HTTP Vary 标头来决定处理请求的策略

我有一个特定的 REST 端点,可以在论坛中创建一个主题;但我想在处理请求时应用不同的策略。例如,如果客户 A 拨打电话,请执行审核。如果客户 B 拨打电话,请执行其他操作。最简单的方法是添加查询参数以进行区分:

另一个绝妙的想法是使用 Vary HTTP 标头。

这种方法有什么问题吗?

0 投票
4 回答
79 浏览

rest - 使用内部锚点来过滤 REST API 的表示是否有意义?

作为我之前关于 REST URIs 用于检索网络论坛资源的统计信息的问题的后续,我想知道是否可以使用内部锚点作为过滤器提示。请参见下面的示例:

a) 获取所有统计信息:

b) 只获取热门话题

c) 只获取排名靠前的用户

或者我应该使用查询参数?

0 投票
6 回答
1141 浏览

c# - 在 .NET 中使用隐式转换替代多重继承

我有一种情况,我想让某种类型的对象能够用作两种不同的类型。如果“基本”类型之一是接口,这将不是问题,但在我的情况下,最好它们都是具体类型。

我正在考虑将一种基类型的方法和属性的副本添加到派生类型,并添加从派生类型到该基类型的隐式转换。然后,用户将能够通过直接使用重复的方法、将派生类型分配给基类型的变量或将其传递给采用基类型的方法来将派生类型视为基类型。

看起来这个解决方案很适合我的需求,但我有什么遗漏吗?是否存在这种情况不起作用,或者在使用 API 时可能会增加混乱而不是简单?

编辑:有关我的具体情况的更多详细信息:

这是为了将来重新设计指标在RightEdge中编写的方式,这是一个自动交易系统开发环境。价格数据表示为一系列条形图,这些条形图具有给定时间段(1 分钟、1 天等)的开盘价、最低价、最高价和收盘价。指标对一系列数据进行计算。一个简单指标的示例是移动平均指标,它给出了其输入的最近n 个值的移动平均值,其中n是用户指定的。移动平均线可以应用于收盘价,也可以应用于另一个指标的输出以使其平滑。

每次出现新柱时,指标都会为该柱计算其输出的新值。

大多数指标只有一个输出系列,但有时有多个输出(参见MACD)很方便,我想支持这一点。

因此,指标需要从“组件”类派生,该类具有在新数据进入时调用的方法。但是,对于只有一个输出系列(这是其中的大多数)的指标,这对他们来说会很好自己作为一个系列。这样,用户可以使用SMA.CurrentSMA 的当前值,而不必使用SMA.Output.Current. 同样,Indicator2.Input = Indicator1;Indicator2.Input = Indicator1.Output;. 这可能看起来差别不大,但我们的许多目标客户都不是专业的 .NET 开发人员,所以我想让这变得尽可能简单。

我的想法是对只有一个输出系列的指标进行从指标到其输出系列的隐式转换。