如何使用php restful api-centric设计内部而不是http请求

时间:2013-09-28 00:19:55

标签: php json api rest curl

我想创建一个php restful api-centric web应用程序/网站,其中我有从我的前端代码调用的data / api。除了每次加载页面时都进行HTTP / curl请求调用,我还可以使用像slim这样的框架来进行内部API调用?

我不确定是否可以在我的前端代码中包含api以供内部使用,并且仍然可以将其分开。

我的想法是这样的:

"example.com/api/story/todays-weather/"
pulls in the json formatted story with a http request with curl or Ajax

但我可以这样做:

require("/api/internal.php");
$uri = "/story/todays-weather/";
$call = api::getStory($uri);
$result = json_decode($call);
.....

我是朝着正确的方向前进还是离开了?

api和前端代码在同一个云盒(​​亚马逊E2 / LAMP)上,我正在计划使用memcached为api。

3 个答案:

答案 0 :(得分:0)

您希望在API和前端内容之间进行代码分离吗?您可以使用Slim Framework来执行此操作,以便您可以轻松维护代码。 Slim Framework非常容易编写模型,也可以准备数据以备将来使用,甚至可以缓存它。

另请参阅此PHP RESTful API框架列表: http://davss.com/tech/php-rest-api-frameworks/

您还可以采用不同的方法并使用前端模型来执行代码分离并具有良好的代码结构。为此,我建议Backbone.js,它将为您的前端代码提供一些不错的键值绑定和事件处理。

答案 1 :(得分:0)

使用MVC模式对我们有利,编写一个具有2个不同视图的模型。 看起来你在做类似的事情:

require("/api/internal.php");
$uri = "/story/todays-weather/";
$call = api::getStory($uri);
$result = json_decode($call);

这样你就可以在前端和API之间进行分离,但重要的部分是相同的,减少了代码重复。

向我看正确的方向。

答案 2 :(得分:0)

我有一个PHP网络服务,可以提供另一个php页面,基本上用户可以在线点击按钮,并且必要时多次调用web服务使其易于维护,不确定这是否是您需要的但是它工作正常对我来说,这是代码的一部分。

我的webservice返回json或xml,我在网上发现了这个部分,并根据我的需要进行了修改。

<?php 
case 'whateveryourwebserviceaction': 

       $params = array("test");
        $tsql = "select * from test where test=?";
        /*Execute the query with a scrollable cursor so
          we can determine the number of rows returned.*/
        $cursorType = array("Scrollable" => SQLSRV_CURSOR_KEYSET);
        $getProducts = sqlsrv_query($conn, $tsql, $params, $cursorType);
        if ( $getProducts === false)
        die( FormatErrors( sqlsrv_errors() ) );

        $posts = array();
        while( $post = sqlsrv_fetch_array( $getProducts, SQLSRV_FETCH_ASSOC))
        {
            $posts[]=array('post'=>$post);

        }


   break;


  }

    if($format == 'json') {
        header('Content-type: application/json');
        echo json_encode(array('posts'=>$posts));
    }
    else {
        header('Content-type: text/xml');
        echo '<posts>';
        foreach($posts as $index => $post) {
            if(is_array($post)) {
                foreach($post as $key => $value) {
                    echo '<',$key,'>';
                    if(is_array($value)) {
                        foreach($value as $tag => $val) {
                            echo '<',$tag,'>',htmlentities($val),'</',$tag,'>';
                        }
                    }
                    echo '</',$key,'>';
                }
            }
        }
        echo '</posts>';
    }
?>

这就是我如何使用jquery从我的php页面调用这个东西。

$.ajax({
                        type: "GET",
                        url: "htto:\\server.com?action=whateveryourwebserviceaction&format=json",
                        dataType: "xml",
                        success: parseXml,
                        error: function (xml) {
                            alert(xml.status + ' ' + xml.statusText);
                            }});

您可以在任何用户输入上调用此函数,并使用webservice提供的结果进行刷新,希望这有助于您继续前进。