对于不需要身份验证的Web服务,我是否需要REST?

时间:2015-02-20 06:36:32

标签: php android web-services rest

我对于Web服务需要REST感到困惑。对于Web服务,可伸缩性等,这是一个菜鸟。

这是我的要求

- 需要获取一些数据,例如:班级中的学生姓名及其照片以及他们的地址和内容

- 由于数据是公开的,因此不需要验证/令牌

我的问题是

- 我需要使用REST吗?使用HTTP GET和POST进行通信的MYSQL + PHP Web服务能完成这项工作吗?

- 如果我采用这种方法,这会影响应用程序的性能,当有大量数据并且它会扩展吗?可能使用该应用程序的最大用户数一次只有50个。

- REST提供了显着的优势,因为我不知道JSON和其他东西,它能否带来学习曲线?

3 个答案:

答案 0 :(得分:1)

使用REST更好。您可以将数据发布为HTTP或JSON,然后在函数中处理此数据并将结果作为JSON返回。

我建议您使用CakePHP或Yii,因为它易于使用。

如果是批量交易,您可以使用MongoDb作为数据库。

答案 1 :(得分:1)

我要说的是REST描述了一种利用HTTP功能并以最佳方式使用它们的方法。否则,您不必使用所有REST机制来实现RESTful应用程序。

我认为此链接可以帮助您了解如何实现Web API(即RESTful应用程序):

以下是我对你问题的回答:

  • REST不需要身份验证即可访问资源。但是,REST会根据HTTP标头Authorization集成身份验证机制。

  • REST描述了使用HTTP的良好实践,但当然,您可以根据需要随意使用它;-) REST建议使用HTTP方法实际使用它们。简而言之,GET检索数据,PUT / POST更新数据(POST主要用于添加数据,PUT更新数据)和{{ 1}}删除数据。 DELETE也可以用于我们可以看作行动的内容。 REST还使用具有路径变量的特定URI。如果我使用您的示例,则类中学生列表的URI将为:POST。 REST还定义了一种机制,可以根据标头/classrooms/<classid>/students请求特定的内容格式,例如JSON。实际上,如果您实现Web应用程序已有若干年,您通常会熟悉大多数这些方面,而REST为您提供了一种设计应用程序以充分利用它们的方法。

  • 关于表现,我会说不。 REST的一个关键方面是RESTful应用程序是无状态的。必须在服务器端处理任何状态。这允许应用程序更容易扩展。我没有看到任何关于批量更新的糟糕表现的原因。事实上,由你来处理它们。 REST保留了发送到服务器的数据格式内容的选择以及在服务器端有效处理它们的方式。您可以考虑使用同步和异步方法。对于异步方法,您应该返回HTTP状态代码Accept。此方法可以允许您控制并发用户的更新工作负载。您可以将批量更新添加到队列中,并在单独的进程或线程中对每个队列进行一次处理。使用批量更新的RESTful应用程序示例是ElasticSearch。请看这个链接:http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/bulk.html

  • REST的主要优点是它允许您充分利用HTTP机制。我想到的另一件事是,现在有一些工具允许您生成客户端工具包以使用您的应用程序并生成有关RESTful应用程序合同的文档。请参阅Swagger(Swagger,Swagger UI,Swagger Codegen)和RAML。这些链接可以为您提供帮助:http://swagger.io/http://raml.org/。另一个工具Restlet Studio(http://studio.restlet.com/#/)可以帮助您理解所有这些概念,因为它附带了一个示例应用程序。关于学习曲线,我认为这不是太重要,因为如果你已经实现了Web应用程序,你就会了解大多数概念。

  • 关于您用于内容的格式,JSON似乎非常合适。但是,REST不会强制执行任何内容类型。它提供了一种请求特定内容的机制(Conneg,即基于标题202的内容协商),但您不必使用它。 REST让您可以在应用程序中管理此内容。

希望它能帮助你, 亨利

答案 2 :(得分:0)

您可以实现您想要执行的任何协议,但使用REST可确保您遵循一个通用过程,这将使您的应用程序更易于维护。

使用的资源量取决于如何在服务器端实现查询和响应。

您应该了解这一点,它将提高您的知识,因为您可以一起学习其他模式(网关,存储库,MVC),以使您的服务器端专业和可维护。

我对您的应用程序的建议是使用Laravel(我推荐),CakePHP等类似的框架实现服务器端。我这样说是因为你的应用程序似乎只是与预定义模型的交互。