Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个API太简单了吗?_Api_Key Value - Fatal编程技术网

这个API太简单了吗?

这个API太简单了吗?,api,key-value,Api,Key Value,有许多键值存储可用。目前你需要选择一个并坚持下去。我相信一个独立的开放API,而不是由一个键值商店供应商制作的,将使商店之间的切换更加容易 因此,我正在构建一个数据存储抽象层(与ODBC类似,但重点是更简单的键值存储),以便有人构建一次应用程序,并在必要时更改键值存储。这个API太简单了吗 get(Key) set(Key, Value) exists(Key) delete(Key) 由于到目前为止我看到的所有API似乎都增加了很多内容,我想知道还需要多少额外的方法 我收到一些回复说set(

有许多键值存储可用。目前你需要选择一个并坚持下去。我相信一个独立的开放API,而不是由一个键值商店供应商制作的,将使商店之间的切换更加容易

因此,我正在构建一个数据存储抽象层(与ODBC类似,但重点是更简单的键值存储),以便有人构建一次应用程序,并在必要时更改键值存储。这个API太简单了吗

get(Key)
set(Key, Value)
exists(Key)
delete(Key)
由于到目前为止我看到的所有API似乎都增加了很多内容,我想知道还需要多少额外的方法

我收到一些回复说set(null)可以用来删除一个项目,如果get返回null,这意味着一个项目不存在。这不好有两个原因。首先,混合返回类型和状态不是很好,其次,并非所有语言都有null的概念。见:

我确实希望能够对数据执行多种类型的操作,但据我所知,一切都可以建立在键值存储之上。这是正确的吗?我也应该提供这些增值功能吗?e、 g:像mapreduce,或者索引


在内部,我们已经有了Erlang和Ruby的基本版本,它为我们节省了大量时间,还使我们能够测试不同键值存储的特定用例的性能

如果您所做的只是获取、设置和删除键值,这很好。

只做绝对必要的事情,与其问它是否太简单,不如问它是否太多,即使它只有一种方法。

对于一个API来说,没有“太简单”这回事。越简单越好!如果它能按原样解决需求,那么就让它离开。

不需要
delete
方法。您只需将
null
传递给
set

编辑以添加:


我只是开玩笑!我会保留delete,并可能添加Count,Contains,可能还有一个或两个枚举数。

我完全支持将接口简化到最低限度,但没有关于系统要求的更多细节,很难判断这个接口是否足够。不过看起来确实很简洁

不要忘了记录“key not-existence”的语义,因为阅读上面的API定义并不清楚。更新:我看到您添加了
exists
方法:这是否必要?您可以使用
get
方法定义某种
NIL
,不是吗

也许值得考虑:考虑一下有价值的“新鲜度”怎么样?i、 e.关联的“上次修改”时间戳?当然,这取决于您的系统需求

访问控制怎么样?它是否在API定义的范围内


对键进行迭代怎么样?如果可能存在较大的集合,则可能需要包含一些分页语义。

您的API缺少一些有用的函数,如“hasKey”和“clear”。比如说,您可能想看看Python对它的攻击,然后选择其他函数


每个人都在说,“简单就是好的”,直到“简单太简单”之前都是这样。

如前所述,越简单越好,但是一个简单的迭代器或键列表方法可能会有用。我总是需要遍历集合。如果迭代器不处理,也可以使用“size()”方法。不过,这显然取决于您的使用情况。

在创建API时,您需要问问自己,我的API为用户提供了什么。如果您的API过于简单,以至于您的客户端编写自己的应用程序更快、更容易,那么您的API就失败了。问问自己,我的功能是否给他们带来了特定的好处。如果答案是否定的,那就太简单了,太笼统了。

不太简单,很漂亮。如果“存在(key)”只是“GET(key)!= null”的一个方便的速记,就应该考虑删除它。我想这取决于你得到的()值有多大或多复杂

简单是一件好事:)一个简单的API每天都胜过一个复杂API的丰富文档。是的,它太简单了。没有程序员会想使用它,因为它不会提供任何工作安全性。如果您按照我们的回答继续编辑API,API当然不会太简单。:-)@祖贝尔:我的建议是,不要做这个抽象层。只要使用一个你仔细选择的现有的好的。根据我的经验,您在这里应用的“抽象层”通常会因为API不完整而带来挫折,而它理论上提供的“我可以轻松切换”选项实际上从未发生过,而且无论如何都会破坏事情。最重要的是,如果你真的想换电话的话,直接打过去换电话并不难。是的,但我认为这不是一个好主意。它使代码对读者的作用变得不那么明显。阅读delete(A)的人可能会理解发生了什么。然而,阅读set(A,null)的人可能需要查看文档来了解发生了什么。也可能存在这样的情况,即存储null正是用户想要做的事情。我添加了“exists”,因为我不想开始混合返回值和状态。谢谢,但取决于系统,这可能意味着额外的
往返
,以获取数据…@Laseralan-同意。我得承认我的回答真是个笑话。我讨厌那些根据参数做很多不同事情的神奇函数!我不认为这个答案是一个笑话:)Without exists()/has_key()删除的语义真的很难定义。考虑下面的序列1)集合(a,42);set(a,空);b=获得(a);2) 组(a,42);删除(a);b=得到(a)。在第一个序列之后,b等于null(显然)。在b的第二个序列值没有被很好地定义之后,要么它是空的,然后您就无法区分空值和空值