Performance 在WS-API中选择性能和易用性

Performance 在WS-API中选择性能和易用性,performance,web-services,api,usability,Performance,Web Services,Api,Usability,我们正在为我们的产品创建一个新的API,它将通过web服务公开。我们有一个内部辩论,API应该尽可能容易使用(以进行更多调用为代价)还是尽可能高效(使其更难使用)。例如,出现了两个问题: 我们应该在服务器上管理会话信息,还是应该将该信息传递回用户,并期望用户在需要时将其发送回我们?(请忽略会话的安全影响) 我们是否应该合并可能产生结果的调用,以节省往返的时间,即使它们实际上不共享相同的逻辑功能 基本上,桌面用户支持清晰、易于使用的API,而互联网用户则希望使其尽可能高效。这是我们提供的第一个

我们正在为我们的产品创建一个新的API,它将通过web服务公开。我们有一个内部辩论,API应该尽可能容易使用(以进行更多调用为代价)还是尽可能高效(使其更难使用)。例如,出现了两个问题:

  • 我们应该在服务器上管理会话信息,还是应该将该信息传递回用户,并期望用户在需要时将其发送回我们?(请忽略会话的安全影响)
  • 我们是否应该合并可能产生结果的调用,以节省往返的时间,即使它们实际上不共享相同的逻辑功能
基本上,桌面用户支持清晰、易于使用的API,而互联网用户则希望使其尽可能高效。这是我们提供的第一个公共API,我们需要一个策略

就我个人而言,我赞成使API尽可能可用。系统上的其他组件可能会对性能产生更大的影响,难以使用的API更容易出错。但我是一个桌面程序员


那么,我们的战略应该是什么?创建这样的API时有哪些常见做法?

在我看来,最好是为那些将不得不使用您的API的人提供最简单的API,但让这些人有深度定制的可能性,使其高效,即使使用起来更难


但是用户的简单性>所有。

在我看来,最好是为那些将不得不使用您的API的人提供最简单的API,但让这些人有深度定制的可能性,使其高效,即使使用起来更困难


但是用户的简单性>所有。

典型的使用场景是什么?API的延迟会决定UI的响应能力吗?性能权衡将有多大?在不了解你的情况下,很难提出任何建议

但是

  • 我的猜测是,将会话信息传递给客户端将更好地扩展。进程内会话管理不允许您在服务实例之间共享状态。在DB中管理会话将使您的服务更加复杂。无论如何,这一切都取决于你的带宽/内存/计算能力

  • 我将从最细粒度的操作开始,只在性能问题变得明显时提供复合方法


  • 典型的使用场景是什么?API的延迟会决定UI的响应能力吗?性能权衡将有多大?在不了解你的情况下,很难提出任何建议

    但是

  • 我的猜测是,将会话信息传递给客户端将更好地扩展。进程内会话管理不允许您在服务实例之间共享状态。在DB中管理会话将使您的服务更加复杂。无论如何,这一切都取决于你的带宽/内存/计算能力

  • 我将从最细粒度的操作开始,只在性能问题变得明显时提供复合方法


  • 我建议您按照以下步骤创建web服务,这意味着无状态。效率比易用性更重要。以后,您可以始终在API之上创建一个框架,以减轻实现难题。

    我建议您按照API创建web服务,这意味着无状态。效率比易用性更重要。以后,您可以在API之上创建一个框架,以减轻实现方面的麻烦。

    您正在讨论一个循环图。这就是可用性(易用性)

    您可能会将这两个方面都考虑进去,因为它们都会影响用户性能

    这是(i)可定制功能的范围与(ii)操作这些功能的效率的对比。两者之间将有一个交叉点

    我要说的是,提供一个简单的API,将控制权交给用户——这是CMS的主要目的。最初可以组合的更详细的方面,稍后将它们作为附加控件引入

    通过这种方式,您将管理用户对系统的学习曲线,以便(i)在开始时不要用过多的选项轰炸他们,(ii)允许他们在开始时快速采用您的系统。然后,通过提供更多的API特性来扩展您的用户控制(从用户角度来看的系统功能)


    另一个很好的建议是,在你走的时候提前询问你的用户。

    你正在辩论一个循环图。这就是可用性(易用性)

    您可能会将这两个方面都考虑进去,因为它们都会影响用户性能

    这是(i)可定制功能的范围与(ii)操作这些功能的效率的对比。两者之间将有一个交叉点

    我要说的是,提供一个简单的API,将控制权交给用户——这是CMS的主要目的。最初可以组合的更详细的方面,稍后将它们作为附加控件引入

    通过这种方式,您将管理用户对系统的学习曲线,以便(i)在开始时不要用过多的选项轰炸他们,(ii)允许他们在开始时快速采用您的系统。然后,通过提供更多的API特性来扩展您的用户控制(从用户角度来看的系统功能)

    另一个很好的建议是提前询问您的用户。

    我的2美分:

    首先从提供高性能的非常细粒度的低级API开始。 然后创建一个易于使用的高级API,它由上述低级API“组成”

    这样,客户可以根据自己的需要定制自己的行为。客户机可以从使用高级API开始,但如果某些用户操作需要高性能,他们可以在一个案例中使用速度更快但难度更大的低级API-