云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

中间件_阿里云是啥_怎么买

小七 141 0

中间件_阿里云是啥_怎么买

时间到了(顺便说一句,现在是早上8点)谈论不太方便的话题…。换句话说,当我用奉承的话指出sapcloudplatformsdkforservice development如何很好地帮助我们开发人员创建OData服务时,这是一个很好的营销。我相信你们都在等待从那个美丽的梦中醒来的那一刻…。请确定:时机已经到来…是时候醒悟并面对现实了:

SDK不能为我们做任何事情…

例如,框架不能通用地处理$skip和$orderby.

所以我们必须手动实现它。希望这个现实不是太可怕…你不必担心,只要你有一些好的教程…。你知道你并不孤单……

背景

通过查询选项$skip,OData服务的用户可以指定在集合开始时应忽略的条目数。因此,如果用户指定$skip=1,那么我们的OData服务必须返回从位置2开始的条目列表我们必须考虑的一个重要规则是ODataV4规范:

"如果$top和$skip一起使用,$skip必须在$top之前应用,看云,而不管它们在请求中出现的顺序是什么。"

这意味着我们将$skip的代码添加到$top的代码之前。

在以前的博客中,我们已经讨论了系统查询选项。老实说,我们不得不承认这是一次很小的谈话…是的,因为讨论作为框架特性提供的现成的查询选项太容易了…现在,关键时刻已经到来:慷慨的框架不再捐赠礼物。我们必须手动实现查询选项$skip和$orderby。

好消息:在这个艰难时期,你并不孤单——你有一些友好的博客系列……

另一个好信息:如果您是第一次访问此博客,您可以查看此处的先决条件,并跟随此博客了解如何创建项目的详细说明。

让我们从$skip开始,这是一项更简单的任务。它应该完全按照它说的做:必须跳过。这是我对OData规范的(愚蠢的)翻译:

$skip system query选项指定一个非负整数n,从结果中排除查询集合的前n项。服务返回从位置n+1开始的项目。

另一个(愚蠢的)翻译可能是:skip与top相反:我不想要第一个条目,我想跳过第一个条目,只得到最后一个条目。

另一个(不那么愚蠢的)翻译可以看一个例子:左边是完整的集合,右边是应用$skip=3

实现

实现它只需要很少的行

首先我们得到完整的列表,大数据好就业吗,和往常一样(注意,这只是虚拟模拟代码):

然后我们必须从请求中获取$skip query选项

然后我们通过删除第一个条目来减少完整列表。数量在skipNumber中:

就是这样。

另外,需要少量处理:我们必须检查URL中是否指定了$skip。如果未指定$skip,则得到值-1我们可以安全地检查一下。背景是OData规范明确规定$skip只允许非负值。

这就是我们的@Query方法的样子:

将$skip和$top结合起来

是的,农业物联网,我们必须通过这一部分。但好的是:我们没有太多的担心。

背景:我们有一个清单,我们想削减它的开始和结束。如果我们先删去开头,然后删去结尾,或者相反,就会产生不同的效果。

为了解决这个疑问,OData规范决定:

"如果$top和$skip一起使用,$skip必须在$top之前应用,不管它们在请求中出现的顺序如何。"

这意味着,在我们的代码中,我们获得了完整的列表然后删除开头(应用$skip)将缩减后的列表发送给FWK然后FWK应用$top

这意味着,我们完全不必担心$top(只要我们把它留给FWK)。

试试

首先,正常的收藏:/DemoProject/odata/v4/DemoService/People结果,我们得到6个条目

在查询中添加$skip:/DemoProject/odata/v4/DemoService/People?$跳过=3结果,我们得到3个条目:人名:4和5和6

组合$skip和$top:/DemoProject10skip/odata/v4/DemoService/People?$skip=3和$top=2因此。我们有两个条目:人名:4和5

更改$skip和$top的顺序不会有任何区别:/DemoProject10skip/odata/v4/DemoService/People?$top=2和$skip=3因此,我们得到了与上一个示例相同的结果

检查某些边缘情况下的正确反应:

尝试值0:/DemoProject10skip/odata/v4/DemoService/People?$top=2&$skip=0结果,我们发现跳过任何东西都是正确处理的:我们得到了人名:1和2

尝试无意义的价值,它不会伤害:/DemoProject/odata/v4/DemoService/People?$top=2和$skip=99结果,我们得到了一个空列表,因为我们跳过了所有,甚至超过了所有

负值是不允许的,这是由框架处理的:/DemoProject/odata/v4/DemoService/People?$top=2和$skip=-1因此,框架会发送一条有意义的错误消息,状态代码400

$orderby是OData中用于指定集合排序的URL参数。

默认情况下不进行排序。在我们的虚拟示例中,我们的虚拟条目以虚拟开发人员添加到虚拟列表中的虚拟顺序显示。

法律要求,智能用户可能希望以所需的有意义的顺序获取数据。

在我们的示例中,我们可以说,我们要根据工作对所有人员进行分组:

/DemoProject/odata/v4/DemoService/people?$orderby=JobId

实现

由于没有现成的支持,我们必须手动实现排序。

返回代码:由于排序只能应用于列表,因此必须将代码添加到@Query方法中正如预期的那样,我们从QueryRequest实例

中获得关于query选项的信息,返回值从不为null。如果URL中没有$orderby语句,那么列表是空的(我们必须在代码中检查一件事)。

为什么它是一个列表?因为在OData中,排序可以在多个属性上完成。

例如,如果有多个具有相同JobId的条目,那么我们可能希望根据它们的名称对这些条目进行额外排序。

很好,但我们不希望这样

我们的代码非常简单,只支持一个属性进行排序: