c# - 构建可编辑的 RESTful API
问题描述
是否可以构建一个可以实时修改的 API?让我自己解释一下。想象一下,我家所有的灯都由 Raspberry PI 管理,这些 PI 向位于“ http://192.168.1.2/ ”的 API 发送 POST 请求。一号灯将发送到“ http://192.168.1.2/light1/hello ” {"state":"off"}
,服务器的答案是off
,二号灯将发送到“ http://192.168.1.2/light2/hello ”{"state":"on"}
和服务器的答案是on
. API Server 会显示灯一关闭,灯二打开。如何制作一个 API,它可以在不重新启动整个服务器的情况下编辑特定灯光的响应?用 C# 来做会很酷,但我会接受任何语言的响应。谢谢阅读。
解决方案
如果我没看错的话,我不确定我看到这种架构的优势是什么?在您的示例中,light1 和 light2 是“light”类型的实体,它们共享一个位属性(状态)。
执行此操作的典型方法是创建一个端点,将实体 id 作为路径的一部分,并按照您提到的那样发送状态。然后可以在不更改服务器代码的情况下编辑实体源(灯光),并且您不会通过端点公开潜在的重要信息(即灯光的名称)。
发布(切换灯光状态)的示例将是http://192.168.1.2/light/hello/2的主体{state:on}
,如果在 C# 中完成,hello
将是对 的操作LightController
,并且2
将是id
操作的参数:
public void Hello(int id, [FromBody] object state)
并获取灯的状态,将是相同的方法,但使用 HttpGet 而不是 HttpPost,当然没有正文(但仍然发送一个 id 以获得单个灯状态)。
而且您想使用另一个端点,例如light/all
获取所有灯光状态。
但是不,您不能在不重新启动服务器的情况下更改 Web 服务的端点(或任何功能)。
希望这可以帮助!
推荐阅读
- python - Django中的OnetoOne(primary_key = Tue)到ForeignKey
- testing - Spock 中 TestNG Reporter.getOutput() 的模拟
- python - TypeError:'int' 对象不可下标。我应该怎么办?
- javascript - ReactJS:更新值而不重新加载页面
- linux - 管道命令返回没有 bash&PIPESTATUS 的代码
- javascript - 如何隐藏 webpack-dev-server 日志?
- javascript - Firebase auth().signInWithEmailAndPassword 使用 try-catch async-await 未捕获错误
- c# - 用于点云中寻路的 DataStructure 算法
- mongodb - 如何将 MongoDb 地图集数据库与 Jaspersoft Studio 连接
- amazon-web-services - 使用自定义 AMI 在 CentOS7 EC2 实例上禁用防火墙