5

我想创建一个以 php restful api 为中心的 web 应用程序/网站,其中我有从我的前端代码调用的数据/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 和前端代码在同一个云盒(​​Amazon E2/LAMP)上,我计划将 memcached 用于 api。

4

3 回答 3

0

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

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

这样您就可以将前端和 API 分开,但重要的部分是相同的,从而减少了代码重复。

向我看正确的方向。

于 2013-10-14T20:05:18.607 回答
0

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

我的 web 服务返回 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);
                            }});

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

于 2013-10-14T20:37:37.357 回答
0

所以你想在你的 API 和前端的东西之间进行代码分离吗?您可以使用 Slim 框架来做到这一点,这样您将拥有一个易于维护的代码。Slim 框架非常容易编写模型,还可以为将来使用准备数据,甚至缓存它。

还可以查看以下 PHP RESTful API 框架列表: http: //davss.com/tech/php-rest-api-frameworks/

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

于 2013-10-11T08:42:41.333 回答