我在一家IP摄像机公司工作,目前我们有一个过时的CGI HTTP API接口。 CGI用C实现。
我想学习并实现一个新的HTTP RESTful API,以便可以执行以下类型的事情:
http://[ipaddr]/api/video/start
http://[ipaddr]/api/video/stop
我想在业余时间从头开始编写这个RESTful API,这样我就可以学习这项新技能。
我在嵌入式C编程和Web技术前端(HTML,JS,CSS等)方面非常有经验,但是,我想实现前端Web UX和应用程序代码(和/或Web后端)之间的链接。
我想了解当前实现HTTP API的方法。 在开始之前,我真的很想学习做事的“正确方法”。
我发现我所看到的所有东西,如OAuth,XAuth,REST,SOAP,实现语言都有点压倒性!
Stack Overflow上是否有人可以提供合理的途径来学习这些东西? 我非常擅长自学,但可以在正确的方向上做一些指示。
我想在C语言中尽我所能,因为这是进入应用程序代码的最简单方法。 但是,如果人们推荐另一种语言,我很高兴,如果有明确的专业人士那么。
start
和stop
不是资源而是action,并且不属于URL。 相反,您应该使用PUT
或PATCH
将一个布尔值(例如stream=true
或stream=false
发送到类似http:// [ipaddr] / video的URL(不需要/ api /或者)
客户端发送新状态,摄像头做出反应。 一旦状态发生变化(视频开始或停止),它将响应200,响应体中的新状态,或204没有响应体。 或者如果操作很长,您可以使用202 Accepted响应并且没有响应正文。
这同样可以用于启动和停止/音频流。
欲了解更多信息,请阅读http://weblogs.java.net/blog/mkarg/archive/2010/02/14/what-hateoas-actually-means
首先,您必须弄清楚您的网络服务器将会是什么,这可能是您选择的操作系统所驱动的。 Windows还是Linux? 或者是其他东西?
如果你使用的是Windows,你可能会使用像ASP.NET或WCF这样的东西; 那些有很好的REST支持,你可以很容易地找到一些好的文档。 这可能需要在托管语言中实现,因此期望从中获得一些学习曲线。
如果您使用Linux作为您的网络服务器,您可能希望使用Apache作为您的网络服务器软件,这意味着服务器软件有许多不同的可能性; PHP,Python等您可以轻松地从这些语言中调用C,尽管可能更容易实现您想要的方法,而不是从那里调用C语言。 当然,Linux作为Web服务器为您提供了服务器软件的附加选项; 你可以随时使用node.js和Express作为你的REST API; 有一点学习涉及做得好,但对于起泡速度,很难击败node.js.
获取Richardson和Ruby的RESTful Web服务(O'Reilly)的副本。 他们讨论了如何使用几种不同的技术设计和实现RESTful服务。 它非常好,除了RFC-2616(HTTP 1.1)和Roy Fielding关于REST的原始论文之外几乎不需要任何其他东西。
有许多优秀的库可供构建(取决于您想要直接学习多少)。 在Java世界中,Apache HTTP Client库是一个很好的基础层。 像RESTlet这样的REST框架可以为您自动完成大部分工作,使其相对简单。