构建Web服务:我有哪些选择?

时间:2010-12-07 02:18:05

标签: web-services rest httpwebrequest lamp push-notification

我正在寻找建立我的第一个网络服务,我希望从一开始就指向正确的方向。

以下是必须进行的互动:

  • 首先,智能手机或计算机会将一大块数据发送到我的网络服务。
  • Web服务会将信息保留在数据库中。
  • 定期,算法将访问和修改数据库。
  • 该算法会定期捆绑数据并将其发送到智能手机或计算机(如何?)

最大的问题是:为了实现这样的目的,我需要学习哪些基本的东西?


现在这里有一些小问题,我也在脑子里徘徊。如果您愿意,请随时回答这些问题。 (...也许可以考虑额外的功劳?)

  • 我听说过很多关于RESTful服务的好东西,我已经阅读了wiki文章,我甚至还玩过Twitter的web服务,这是RESTful。这是显而易见的方法吗?或者我还应该考虑别的吗?
  • 我使用什么编程语言将内容保存到数据库中?我认为php将是首选。
  • 我使用什么编程语言与数据库进行交互?我觉得任何事都可以接受,对吗?
  • 我是否必须担心并发访问数据库,或者MySQL是否为我处理了这个问题? (我对数据库也很新。)
  • 我究竟如何发回信息?显然,如果它是对HTTP请求的回复没有问题,但有时候回复可能需要相当长的时间来计算。在得到答案之前,我是否应该让HTTP请求保持未完成状态?
  • 无论是否已向我发送信息,有时我都需要向智能手机发送信息。我如何向用户推送信息?

可能有助于您了解我来自哪里的其他信息:

  • 我非常熟悉Java,C#,C ++和Python。我玩过PHP,Javascript和Ruby。
  • 我对数据库相对较新,但我得到了基本的想法。
  • 我已经设置了我的服务器,而且我正在使用基本的LAMP堆栈。我对 L A M P 的理解还相当简陋。

3 个答案:

答案 0 :(得分:1)

对于编程之爱,请不要使用PHP,如果你已经熟悉Python了。后者使代码更清晰,更易于维护。并不是说在PHP中编写好的代码是不可能的,但这是相对罕见的。您可以将Python用于所有服务器端的东西,包括MySQL交互,以及MySQLdb模块。使用标准CGI,FCGI或mod_python。

对于数据库,使用事务将消除冲突。但是你通常可以设计一个不会发生冲突的系统。例如,在每个插入上使用自动递增的主键ID将确保每个条目都是唯一的。

您可以使用Javascript“拉”数据,也许可以使用AJAX方法,或使用短信或其他技术“推送”。

当回复需要一段时间进行计算时,您可以使用AJAX“轮询”。这是一种非常常见的技术。服务器只返回“我们正在处理这个”(或等效的)内置刷新,直到结果准备就绪。

我不是REST的专家,但是AJAX,特别是在使用轮询而不是简单地响应用户输入时,可以说违反了RESTful原则。但你可以是一个纯粹主义者,或者你可以做任何有用的事情。这取决于你。

我不相信我曾经使用过除SMS之外的任何“推送”技术,那是多年前很多公司都有免费的短信网关。因此,如果您想“推送”数据,最好希望其他人加入对话!

答案 1 :(得分:1)

语言:Python的易用性假设GIL并不是您需求的特别关注点(例如多线程)。它具有大多数数据库的驱动程序并支持多种协议。它有几个Web框架 - 最受欢迎的可能是Django

协议:如果您是以HTTP为中心的学习SOAPREST。注意,SOAP往往是冗长的,这会导致移动数据量的问题。另一方面,如果您正在查看其他选项,请研究socket programming以及某些二进制格式,例如Google的protocol buffers。 Flash也是一种可能性(参见:Flash Remoting)。请注意,二进制选项要求用户在其计算机上安装一些内容(例如applet或独立应用程序)。

回复:如果进程长时间运行,并且客户端应该在完成后收到通知,我建议为客户端开发应用程序。可以使用JavaScript对浏览器进行编程以定期轮询,或者可以将Flash电影嵌入到实时更新中,但这些是浏览器编程的一些棘手问题。如果您正在处理无线电话,请查看SMS。否则我只会为客户提供获取状态的方法,但不会发出通知(例如推送与拉动)。正如@jcomea_ictx所写,如果它是基于浏览器的解决方案,AJAX是一个选项 - 研究jQuery

并发:了解ACID对数据库的意义。想想如果你收到多次写入同一数据会发生什么 - 数据库可能不一定按照你想要的方式解决这个问题。

答案 2 :(得分:0)

使用Java。最新版本的Java EE 6使编写RESTful和SOAP服务变得轻而易举,并且它也很容易与数据库互操作。

使用真正的语言而不是脚本的好处是:完整的服务器端状态,强类型,多线程以及无数可能会或可能不会派上用场的其他东西,但知道它们可用会使您的项目面向未来