实现移动应用程序Web服务的标准方法

4
我是一名PHP开发者,需要为移动应用程序开发者实现Web服务以共享数据,例如帖子、点赞等。 最佳的实现此类Web服务的方式是什么?是否有相关的标准? 目前,我使用JSON输出消息和内容等信息。 我的主要问题与应用程序开发人员有关的是错误消息。建议返回一个带有错误代码和消息的数组来显示:
$result = array(
    'status' => false, // because registration failed
                       // if registration succeed then would be true
    'errors' => array(
        array(
            'code' => '1',
            'message' => 'Password is not strong enough!',
        ),
        array(
            'code' => '2',
            'message' => 'Password and password confirmation do not match!',
        ),
        array(
            'code' => '3',
            'message' => 'This email address has been used!',
        ),
    ),
);

但他们建议将所有错误信息作为字符串返回,只使用状态参数,如果状态为false,则会显示消息,类似于以下内容:

$result = array(
    'status' => false,
    'message' => 'Password is not strong enough!' . PHP_EOL .
                 'Password and password confirmation do not match!' . PHP_EOL .
                 'This email address has been used!',
);

提前感谢您。

这是需要翻译的内容。

我建议在这里(https://www.toptal.com/php/building-rest-api-for-legacy-php-projects)和这里(http://gtjourney.gatech.edu/live/gt-devhub/documentation/restful-api-structure)看一下。 - Abdul Mannan
2个回答

2
数十种网络服务协议存在,其中最著名的是(在我看来)SOAP。其中一些协议被 PHP 原生支持,大多数都有开源实现可用,但对于简单需求来说,它们可能都过于繁琐。
对于基本的错误处理机制,简单的 5xx HTTP 状态码可能已经足够了。
<?php

define('HTTP_CUSTOM_ERROR_CODE', 599);
define('HTTP_CUSTOM_ERROR_REASON', 'Something wrong is going on');

if( somethingWrong() ) {

    header(
        sprintf('%s %s %s',
            $_SERVER['SERVER_PROTOCOL'],
            HTTP_CUSTOM_ERROR_CODE,
            HTTP_CUSTOM_ERROR_REASON
        ),
        true,
        HTTP_CUSTOM_ERROR_CODE
    ); // sends HTTP header "HTTP/1.1 599 Something wrong is going on"

    echo $errorMessage; // or echo json_encode( $structuredErrorData );
    die();

} else {

    echo json_encode( $response );

}

根据HTTP协议规范,任何HTTP客户端都应该处理此错误条件。请参考您的平台手册获取更多信息,或者告诉我们更多关于您的目标移动平台的情况。

谢谢RandomSeed。我看了你介绍的资源,对Web服务有了更深入的理解,我认为你的回答值得50个悬赏(甚至更多)。 - Ali Farhoudi

1
使用一个框架。不要自己编写Web服务层。如果您知道需要自己编写,则具有足够的经验来回答这个问题 :)
框架选择和服务协议的使用是下一个明显的问题。 协议......除非被迫使用SOAP,否则不要使用它,使用REST/RPC。 REST和RPC都更容易实现,并且大多数框架可以在开箱即用的情况下完成两者。 框架......选择最简单的框架以避免陡峭的学习曲线,例如:
选择使用哪种技术以及原因真的取决于您。您可以在此处找到流行框架列表。

http://www.sitepoint.com/best-php-framework-2015-sitepoint-survey-results/

注意,框架偏好往往是主观的,即人们(包括我在内)会建议您使用他们熟悉的内容。如果您有时间,建议您使用几个框架实现基本服务,以查看哪个框架最适合您,例如,您可以阅读它们的文档并在您的容器中安装它,如Apache / Nginx等,这通常是快速找出您不喜欢特定框架的方法。
我个人认为,任何需要数据库才能安装和查看网页的框架都很复杂。像Drupal这样的东西可能会让人感到震惊,因为它具有所有功能,其中大部分都不需要用于构建服务。
Yii2非常简单,并且具有实现REST的文档...

http://www.yiiframework.com/doc-2.0/guide-rest-quick-start.html

"Laravel可能也是一个不错的选择..."

https://laravel.com/docs/5.2

这两个项目的文档都很好,易于使用,可以通过composer安装...
记住我的个人偏好。我用过Yii,并且没有遇到任何问题。但你可能非常讨厌它。在这里看看有关Yii的非常不同的意见,有些人非常讨厌它...

http://laravel.io/forum/04-29-2015-suggestions-for-technology-stack-choice-laravel-5-vs-yii-2

这个人写了一本关于Yii的书,现在更喜欢Laravel。

https://yii2framework.wordpress.com/tag/yii-2-0-vs-laravel/


谢谢你,哈利。是的,我正在使用框架。我曾经使用过CodeIgniter和Laravel,并且我现在正在使用CakePHP构建项目。在我之前,有其他开发人员也在这个项目上实现了Web服务。但是,我真的不想像以前那样实现Web服务。他们的结构一点也不好。我想尽可能地实现新的Web服务,并且我想知道什么是最好的方法。我在问题描述中提到了一些想法。谢谢。 - Ali Farhoudi
1
你的问题不太明确。他们似乎要求以JSON格式回应,并且状态将会告诉他们是否出现错误。如果使用REST,则'status' => false,并不是指示错误的好方法。应该使用HTTP状态码,例如HTTP 404 == 未找到,HTTP 403 == 禁止等来指示错误。 - Harry
谢谢。那很有说服力。 - Ali Farhoudi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接