我可以创建一个接受用户输入的web api web服务吗
本文关键字:web 用户 输入 api 服务 创建 一个 我可以 | 更新日期: 2023-09-27 18:00:43
假设我们有一个RESTful web服务,可以计算英国皇家邮政的邮费。
将有许多重要的输入参数:物品重量(克,int),项目长度(cm,int),项目宽度(cm,int),物品类别(字母/包裹、字符串/枚举),所需服务(第一类/第二类/特殊递送等、字符串/枚举),目的地(国内/国际/可能进一步指定后者,字符串/枚举)
这样的应用程序很容易创建为WebAPI。它可以通过URL调用,例如。。。http://myserver.com/api/mailcharges?weight=150&长度=15&宽度=10&category=字母&服务=第一&目的地=国内
然后,web服务将对其内部表进行简单的查找,并在其响应负载中返回邮费。
这样做的美妙之处在于,它可以被组织内部(甚至外部)的各种应用程序使用。然而,这需要调用web服务的每个应用程序都能够填充这些参数;整数是可以的,它们只是一个数字。但是字符串或枚举更难。需要在每个客户端应用程序中复制用于输入和验证这些内容的逻辑。如果web服务能够提示用户输入任何未传入或作为null或无效值传入的值,那不是更好吗。事实上,如果web服务有一个允许用户输入任何或所有参数的用户界面,那不是更好吗。
我正在寻找的是一个网站和网络服务之间的交叉。一个web应用程序,可以通过简单的RESTful http请求调用,该请求会弹出用户对话,接受用户输入,当用户单击合适的按钮时,进行计算并以JSON/XML响应的形式返回答案。
有人对如何实现这样的体系结构有什么想法吗?我曾尝试从web api控制器中调用MVC操作/视图,但响应是MVC视图的html,并直接返回到api控制器,而不是渲染和POST其用户输入。
我希望我只是厚着脸皮,答案是显而易见的,但到目前为止,我所有的实验都失败了,任何建议,无论多么牵强或离谱,都将非常受欢迎。
我意识到这是一个相当琐碎的例子,但同样的论点适用于更复杂的web服务,在这些服务中,跨多个客户端应用程序复制用户输入表单、输入验证、复杂的处理逻辑等将比这个例子更成问题。
如果web服务能够提示用户,则基本上错过了服务的要点。它不再是一个网络服务,而是一个网页。
为了让内部/外部应用程序/网站使用您的服务,他们基本上需要知道三件事:
- 在哪里询问-这是您的
http://myserver.com/api/mailcharges
- 论点是什么,即
weight
、length
- 可接受的参数值是什么
而1。和2。通常只是API文档,您似乎对第3页有问题-您希望用户以某种方式被提示在可能的值中进行选择,而不是猜测。但您也希望用户应用程序不负责维护/验证可能值的列表。
你猜怎么着?您只需要另一个API。:)的API描述您的参数。
让我们集中讨论category
字段。您的API可以用一个新的URL:http://myserver.com/api/getCategories
进行扩展,该URL:CCD~5本质上返回一个可用(API目前理解的)可能类别值的列表。这可以是JSON,也可以是逗号分隔的字符串或任何可靠的字符串。现在,最终用户的支持GUI的应用程序调用API,请求分类,并相应地创建UI——使用获得的值填充ComboBox或其他内容。其他领域也是如此。你可以。即获得CCD_ 6或CCD_。
您在问题中提到的重要事项是验证:输入和验证这些信息的逻辑需要在每个客户端应用程序中复制。这在某种程度上是正确的,因为它本质上取决于最终用户应用程序中使用的技术。另一方面,非常重要,API自己执行验证!你永远不可能知道谁将使用你的API。检查两次总比从不检查要好。