2

我在嵌入式堆栈中实现了一个 RESTful Web API,它提供了一个没有 REST 功能的网络服务器。准确地说,嵌入式堆栈是运行在 MQX RT 操作系统之上的 RTCS,微控制器是飞思卡尔的 Kinetis K60。我能够区分 GET/POST/DELETE/PUT 请求并获取带有参数的 url(比如说 /this/firstValue/that/secondValue/...)。

我使用 strtok 来分隔 url 的不同元素并做出决定。但是我的代码很丑,因为它充满了 strcmp 函数和 if 语句。我还需要检查 firstValue 和 secondValue 的界限(我可以在 set/get 函数中执行此操作,但每个参数的 2 个函数将是重复的)。此外,我希望能够添加参数而不会弄乱决策树。

我有两个问题:

  • 你如何让代码变得又好又干?
  • 您认为 REST Web 服务适合通过网络控制我的微控制器吗?你有这样的例子吗?我正在使用 REST Web 服务,因为它提供身份验证(但没有保密,因为我还不能设置 SSL 套接字),我认为这是一个优雅的解决方案。
    我评估了其他一些解决方案:
  • SNMP (snmpset/snmpget):它可以工作,但是设置 MIB 真的很痛苦,而且因为它是 SNMPv2,所以仍然没有保密性。
  • telnet 服务器(我还没有 SSH 解决方案):除了 REST 可能更容易从外部控制之外,我没有看到任何优点/缺点,我正在使用 curl 对其进行测试:)
  • SOAP 远程过程调用(我就是不喜欢)
  • 还有其他想法吗?我需要一些简单且可扩展的东西,因为可以控制多个目标。我的资源有限:s。在某些时候我需要保密,并且我希望在将 CyaSSL(嵌入式 ssl 实现)移植到 MQX 时拥有它。他们说这将在下个月发生,所以保密将不再是问题,但如果你有其他想法......

——
艾米连

4

1 回答 1

0

REST 是一种架构模式,所以我猜你的意思是你的服务器提供 HTTP。

资源是“可以命名的任何数据”。例如,嵌入式设备上的 LED 可能是 '/leds/led3' 的 URI,您可以使用标准 PUT 请求更改其保存的数据(其状态、RGB LED?等),GET 应返回其当前状态。

至于对其进行编码,如果内存允许使路径查找尽可能简单,则通用树结构可能是明智的。在叶子上使用数据和函数指针(模拟对象)

于 2012-10-19T10:23:49.850 回答