嵌入式 Web 服务器中的 CRUD

标签 c rest embedded crud microcontroller

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

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

我有两个问题:

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

--
埃米利安

最佳答案

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

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

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

关于嵌入式 Web 服务器中的 CRUD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12971531/

相关文章:

c - 处理器寄存器 - 应用程序变量关联

c - 嵌套案例、for 和 if 循环的优先级是什么?

C 程序问题 "pointer being freed was not allocated"

java - Tomcat SSL配置问题

embedded - 为什么我的代码在使用 Realview 工具构建时表现不佳,但使用 Codesourcery 构建时表现更好?

c++ - 如果用两个变量或一个变量和一个数字文字进行加法,为什么从 C++ 调用的汇编函数会在标志中给出不同的结果?

Restful 网络服务

java - 指向这些方法的 uri 会是什么样子

embedded - 我可以在不重置开发板的情况下重置 Microchip TCP/IP 堆栈吗?

c - USB 24 位音频流描述符