将 RESTfull 与 Codeigniter 框架结合使用

Using RESTfull with Codeigniter framework

我正在尝试为完全在 PHP Codeigniter 框架中实现的网页构建移动应用程序。我想我会为移动应用重用网站的服务器 API。为此,我需要 RESTfull 服务。

问题是我根本不知道 PHP!据我所知,基于 Codeigniter 构建的网站通常没有 public 端点来调用它的 API。 Ion-auth 就是一个例子。身份验证在 PHP 级别完成,没有 REST 服务。

所以我的问题是...我上面写的是否有意义并且我是否正确理解了框架?如果是这样,是否意味着我必须为我的移动应用程序编写单独的服务器,该服务器将具有完全相同的功能和数据库,或者是否可以优雅地重用当前服务?

我已经研究过 codeigniter-restserver,但似乎我必须重写网站中的所有逻辑,我宁愿在 spring 或节点中进行。

你会得到一组相当主观的答案。有几种方法可以完成您似乎正在寻找的事情。

首先,是一个带有 CodeIgniter-restserver 的单独 "API" 控制器,它复制了您所有的控制器功能。这将不是最佳选择,因为您必须在两个地方维护您网站的代码。

另一个稍微好一点的选择是检查移动应用程序发送的 $this->input->is_ajax_request() 或类似内容,然后使用 restserver 发送回响应,但网站通常使用 view()

最终,也是你最好的选择,是重构你所有的代码,使一个单一的代码库 API 端点(这是你必须决定 CI 是否是一个合理的 API 或者如果你想使用其他东西)并且你的网站和移动应用程序使用它。

编辑

我才知道你特别提到了ion-auth,我正好打开了PyroCMS的用户模块。

if ($this->input->is_ajax_request())
        {
            $user = $this->ion_auth->get_user_by_email($user->email);
            $user->password = '';
            $user->salt = '';

            exit(json_encode(array('status' => true, 'message' => lang('user:logged_in'), 'data' => $user)));
        }

因此,对于 restserver,您可以发回:

$this->response(array('status' => true, 'message' => lang('user:logged_in'), 'data' => $user)), 200);

编辑 2 关于如何使用 Ajax 发送 post 数据,这与 OP 完全不同,但是使用 jQuery:

的快速示例
// Not complete code
<script>
 // Attach a submit handler to the form
 $( "#searchForm" ).submit(function( event ) {

  // Stop form from submitting normally
  event.preventDefault();

 // Get some values from elements on the page:
 var $form = $( this ),
   term = $form.find( "input[name='s']" ).val(),
   url = $form.attr( "action" );

  // Send the data using post
  var posting = $.post( url, { s: term } );

 // Put the results in a div
 posting.done(function( data ) {
   var content = $( data ).find( "#content" );
   $( "#result" ).empty().append( content );
  });
});
</script>

示例来自 https://api.jquery.com/jquery.post/