小编Ale*_*scu的帖子

PATCH方法应该返回响应主体中资源的所有字段吗?

PATCH方法应该返回响应主体中资源的所有字段吗?
或者它应该只返回更新的字段?

我正在读这个

例如,如果它仅返回更新的字段,则用户可以知道在服务器中更新了哪些字段,而用户更新了一些字段.

**Users resource representations**
name: string
age: number
createdon: date
modifiedon: date
Run Code Online (Sandbox Code Playgroud)


PATCH /users/{userId}
Request body
{
  name: 'changedname',
}
Run Code Online (Sandbox Code Playgroud)


Response body Case1
{
  name: 'changedname',
  age: 20,
  createdon: 2016-01-01,
  modifiedon: 2016-06-09
}
Run Code Online (Sandbox Code Playgroud)


Response body Case2
{
  name: 'changedname',
  modifiedon: 2016-06-09
}
Run Code Online (Sandbox Code Playgroud)

rest http httprequest http-verbs restful-architecture

15
推荐指数
3
解决办法
1万
查看次数

在AutoMapper中将复杂类型映射到平面类型

我有一个复杂的对象,如:

public class BusinessUnit
{
        public TradingDesk TradingDesk { get; }
        public string Division { get; }

        public BusinessUnit(string division, TradingDesk tradingDesk)
        {
            Division = division;
            TradingDesk = tradingDesk;
        }
}
Run Code Online (Sandbox Code Playgroud)

我想将其映射到平面类型:

public class Row
{
   //TradingDesk properties
   public string TraderFirstName { get; set; }
   public string TraderLastName { get; set; }
   public string TradingDeskName { get; set; }

   public string Division { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我已经配置AutoMapperTradingDesk:

CreateMap<TradingDesk, Row>().ForMember(vm => vm.TradingDeskName, op => op.MapFrom(src => …
Run Code Online (Sandbox Code Playgroud)

automapper

12
推荐指数
1
解决办法
436
查看次数

来自 Google 的 ID 令牌中的 email_verified = false

我使用Google ID 令牌让用户登录我的网络服务。作为验证从 Google 收到的令牌的一部分,网络服务会email_verified = true在令牌的有效负载中检查该令牌。

我的一些用户使用非 Gmail、非 Google Apps 电子邮件地址注册了 Google 帐户。他们确实点击了谷歌在注册后发送给他们的电子邮件中的链接,以验证他们的电子邮件地址。

当这些用户尝试登录我的网络服务时,我会获取email_verified = false令牌的有效负载。

这是什么意思?我可以/应该在验证令牌时忽略它吗?

google-authentication jwt google-oauth

8
推荐指数
1
解决办法
2268
查看次数

在 REST API 的 POST 请求中同时使用查询和正文参数是否有意义?

我有一个资源,本质上需要另一个资源作为创建的输入数据。例如:

POST /v1/NewResource
body: {InputResource}
Run Code Online (Sandbox Code Playgroud)

然而,有趣的是,创建 NewResource 的成本很高,而且资源本身是暂时的(不是持久的)。有些消费者可能只需要部分资源。因此,我确实有两个输入参数:创建所需的数据,然后处理来自消费者的指令以控制实际完成的工作量。

我看到两条路(至少):

POST /v1/NewResource?detailLevel=base|full
body: {InputResource}
Run Code Online (Sandbox Code Playgroud)

POST /v1/NewResource
body: {Request.detailLevel and Request.InputResource}
Run Code Online (Sandbox Code Playgroud)

第一个甚至是一个选择吗?有人有任何偏好/经验吗?让有效负载只是所需的数据并与处理指令分开,有一定的优雅性。我意识到这里没有正确或错误的答案,只是对社区的想法感到好奇。

rest api-design restful-url restful-architecture

6
推荐指数
1
解决办法
2709
查看次数

事件驱动架构的 API 网关

我们正在尝试将我们的单体核心拆分为微服务,并添加一些使用消息系统(例如 Kafka)相互连接的新服务。

下一阶段是创建 API 端点,以便通过 Api 网关在移动应用程序和微服务之间进行通信。

开发 API 网关以向/从微服务传输数据的好解决方案是什么?

  1. 使用消息系统作为请求-回复之一(将 API 网关上的请求转换为消息命令,等待来自带有状态或必要数据的消息系统的响应)?
  2. 在必要的微服务上创建 REST 端点(例如使用REST.li)以通过网关发送或获取数据;使用消息系统根据微服务产生的事件来保持数据的一致性?

感谢您的建议和一些想法

rest soa event-driven microservices

6
推荐指数
1
解决办法
1335
查看次数

过滤、合并、排序和分页来自多个来源的数据

目前,我正在通过一种方法从数据库检索数据,该方法检索IQueryable<T1>、过滤、排序,然后对其进行分页(基本上所有这些都在数据库上),然后将结果返回到 UI 以在分页表中显示。

我需要集成另一个数据库的结果,分页似乎是主要问题。

  • 模型相似但不相同(相同的字段,不同的名称,在返回之前需要映射到通用域模型);
  • 无法在数据库级别加入;
  • 目前两个数据库之间大约有 1000 条记录(在过去 18 个月内添加),并且可能以基本相同(缓慢)的速度增长;
  • 结果始终需要按 1-2 个字段(按日期)排序。

我目前在这两种解决方案之间左右为难:

  1. 从两个来源检索所有数据,合并、排序然后缓存它们;然后在接收请求时简单地对所述缓存进行过滤和分页 - 但我需要在修改集合时使缓存失效(我可以);
  2. 过滤每个源上的数据(同样是在数据库级别),然后在返回之前检索、合并、排序和分页。

我正在寻找一种性能良好的算法。理想的解决方案可能是它们之间的组合(在数据库级别缓存+过滤),但我目前还没有考虑这一点。

c# merge pagination caching iqueryable

5
推荐指数
1
解决办法
3099
查看次数

LINQ OrderBy 不同的字段类型取决于 IF 语句

我正在尝试对一些可能处于以下(推断)状态之一(按此顺序)的数据进行排序:

  • live(有效StartDate,空EndDate);
  • draft(空StartDate);
  • ended(有效EndDate)。

我在 a 上继承了以下语法IQueryable

iQueryableData
    .OrderBy(t => t.StartDate == null ? 1 : (t.EndDate == null ? 0 : 2))
    .ThenByDescending(t => t.StartDate)
    .ThenBy(t => t.PartnerId)
Run Code Online (Sandbox Code Playgroud)

这很好,因为它根据某些IF语句对表的前 3 列之一进行排序。

现在我需要重写它以在不同(但相似)的模型上在内存中工作(所以只是LINQ,没有IQueryable)。以下是上述查询的大致翻译:

data
    .OrderBy(t => t.StartDate == null 
                      ? t.EndDate // DateTime
                      : (t.EndDate == null 
                            ? t.Id // integer
                            : t.Name // string
                        )
            )
Run Code Online (Sandbox Code Playgroud)

这显然无法编译,因为

CS0173 C# 条件表达式的类型无法确定,因为“int”和“string”之间没有隐式转换 …

c# linq sorting

5
推荐指数
1
解决办法
1308
查看次数

如何使用Rest Assured在GET URL中传递查询字符串参数?

如何使用Rest Assured在GET URL中传递查询字符串参数?

网址是: http://example.com/building

我的查询字符串是:

globalDates:{"startMs":1473672973818,"endMs":1481448973817,"period":90}
limitTo:6
loadTvData:true
startFrom:0
userId:5834fb36981baacb6a876427
Run Code Online (Sandbox Code Playgroud)

api automated-tests restful-architecture rest-assured web-api-testing

5
推荐指数
2
解决办法
1万
查看次数

将特定的ISO8601 TimeSpan("P2M2W5D")转换为C#TimeSpan

我一直在解析ISO8601 TimeSpan值一段时间,直到我遇到一个导致我的代码抛出System.FormatException:

TimeSpan ts = XmlConvert.ToTimeSpan("P2M2W5D");
Run Code Online (Sandbox Code Playgroud)

看看ISO8601标准,它似乎是一个正确的输入,也没有任何含糊之处(M明确指的是几个月,而不是几分钟).

System.FormatException was unhandled by user code
HResult=-2146233033
Message=The string 'P2M2W5D' is not a valid TimeSpan value.
Source=System.Xml
Run Code Online (Sandbox Code Playgroud)

c# datetime parsing iso8601 xml-parsing

4
推荐指数
1
解决办法
2095
查看次数

如何将p4merge设置为Visual Studio 2015的差异工具| 混帐

通过教程,我成功地将P4Merge与TortoiseGit连接起来.

但是,鉴于我将大部分时间花在IDE(Visual Studio 2015)上,我还想将此设置为使用P4Merge作为差异工具.

以前(也就是在使用TFS时),这就足够了.但是,鉴于我现在正在使用git,VS中没有选项以这种方式连接它:

在此输入图像描述

然而,我发现了如何通过配置用户工具的Visual Studio 2015年工具开发命令提示符tf diff /configure,自顾自地在前面的教程与.bat文件,但它似乎并没有为我做任何事.

我可能错过了一些东西,但希望鉴于现在流行的P4Merge,VS(&git)有多受欢迎,必须有人能够实现这一目标.

git p4merge visual-studio visual-studio-2015

4
推荐指数
1
解决办法
1048
查看次数