注册

在Nginx上搭建OS Restful 或API访问测试环境步骤及常见错误解决

2019-09-05 22:09 点赞 2 评论 0 转发 0

当下的系统更多要求适应多终端展现,实现所谓“高内聚与低耦合”,就是能够封装数据,便宜不同终端程序调用,最常适配的除了PC端和H5端,就是APP与微信小程序。所以很多产品都在开发独立的API以便调用。如果使用Nginx搭建OS的API测试环境需注意:

 

一. 开启重写与路由

1. 环境准备:

PHP Study 2018 + OpenSNS 5.7开源版。安装过程略。安装过程中注意:

(1)不要使用二级域名,使用www.XXX.com(或XXX.com)顶级域名,此处假定我们使用http://www.myapi.io作为网站域名。

(2)确定域名是虚拟主机路径的根目录。不要将主程序置于根目录的子目录中。

 

2. 检查httpd.conf文件是否设置了正确的虚拟路径。

锚点位置:DocumentRoot。假设物理路径为:D:\WWW

 

3. 检查httpd.conf文件中是否开启了重写设置。

锚点位置:LoadModule rewrite_module modules/mod_rewrite.so

 

4. OpenSNS设置

打开OS后台【系统】—>【网站设置】—>【系统配置】,检查URL模式,选择“兼容模式”。

或者修改文件设置,位置在:/Conf/common.php,找到’'URL_MODEL',一共有4个值,即0,1,2,3,代表四种模式,其中:

0 - 传统的URL参数模式,例如:http://www.myapi.io/weibo/index/weibodetail?id=1.html

1 - TP系统默认的智能模式,即PathInfo模式,例如:

http://www.myapi.io/index.php?s=/weibo/index/weibodetail/id/1.html

http://www.myapi.io/weibo/index/weibodetail/id/1.html

 

这里第一个参数会被解析为模块名称,或者路由路径名称,即weibo;

第二个参数被解析为控制器名称,即IndexController;

第三个参数被解析为方法名称,即weiboDetail();

而之后的参数即为方法中所带参数,即id值。

2 - Rewrite模式,需要定义.htaccess文件内容,例如隐藏入口index.php文件等

3 - 兼容模式,即传统模式0和智能模式1的结合,兼容模式的好处是不用切换URL模式设置,直接由浏览器判断匹配模式类型。

具体可参考文档TP文档:https://www.kancloud.cn/manual/thinkphp/1697

 

二. 添加重写规则与错误排查

1. 常规设置

先测试完整的网址访问网站是否成功,包括:

http://www.myapi.io

http://www.myapi.io/index.php?s=home/index/index

 

成功后利用PHP Study打开文件vhost.conf,找到该域名的设置,代码如下:

server {

        listen       80;

        server_name  www.myapi.io ;

        root   "D:\WWW\myapi";

        location / {

            index  index.html index.htm index.php;

            #autoindex  on;

        }

        location ~ \.php(.*)$ {

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;

            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            fastcgi_param  PATH_INFO  $fastcgi_path_info;

            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;

            include        fastcgi_params;

        }

}

检查设置是否已包含上述代码,特别是fastcgi_split_pathfastcgi_param。如果齐全,可直接添加如下代码:

server {

        listen       80;

        server_name  www.myapi.io ;

        root   "D:\WWW\myapi";

        location / {

            index  index.html index.htm index.php;

            #autoindex  on;

            if (!-e $request_filename) {

                rewrite  ^(.*)$  /index.php?s=$1  last;

                rewrite  ^(.*)$  /index.php$1  last;

                break;

            }

        }

        location ~ \.php(.*)$ {

            fastcgi_pass   127.0.0.1:9000;

            fastcgi_index  index.php;

            fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;

            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

            fastcgi_param  PATH_INFO  $fastcgi_path_info;

            fastcgi_param  PATH_TRANSLATED  $document_root$fastcgi_path_info;

            include        fastcgi_params;

        }

}

很明显,这段代码是利用Rewrite模式,去除入口文件index.php,去除之后,加上之前的配置,就可以使用Restful风格的路由地址了!于是可以测试如下网址:

http://www.myapi.io/home/index/index

如果访问成功,则说明配置正确。

 

2. 常见问题

(1)无法加载控制器

A. 物理路劲与虚拟路径不匹配,可检查域名和路径设置。

B. index.php没有被重写,可检查代码。

C. Restful风格的OS URL路径写错,可检查正确路径。

D. 模块配置代码中有其它路由写法。

 

(2)关于开启模块中的路由写法

根据TP规则和OS定义,在每个模块的配置文件,即config.php文件中,可以根据自身需求开启路由,以微博模块为例:

微博模块原本的URL为:http://www.myapi.io//index.php?s=weibo/index/index

正常重写后可以这样访问:http://www.myapi.io/weibo/index/index

 

如果访问出错,还可以检查weibo/conf/config.php,开启路由的代码定义如下:

 

return array(
          //开启路由及定义路由规则
         'URL_ROUTER_ON' => true,   
         'URL_ROUTE_RULES' => array();

);

在路由规则中,检查是否定义不同的路由规则。在OS中的路由规则文件是: route_rules.php

 

三. 测试API访问

可以使用API测试工具进行接口访问测试。本人使用Postman。测试时可以参考OS的API文档:

http://os.opensns.cn/book/index/read/id/5.html,也可自行编写简单的API端口测试代码进行测试。简单的 API接口编写与测试步骤(具体代码略):

1. 在模块控制器中编写功能代码

2. 在模块控制器中引入TP规则

3. 定义路由规则

4. 返回值格式定义为Json格式

5. 测试

完整实例可参考TP文档:https://www.kancloud.cn/manual/thinkphp/1711

 

这里说明一下测试,测试的前提必须保证路由成功。可现在浏览器中测试,以微博为例,发布一条微博内容,如“自定义测试”,按之前所述,访问如下地址:

http://www.myapi.io/weibo/index/weibodetail/id/1.html

如果访问正常,显示所发微博内容为:“自定义测试”,那么可以使用Postman工具进行调试了:

(1)方法:GET

(2)地址:http://www.myapi.io/weibo/index/weibodetail

(3)参数:id=1

 

至此便可看到返回的Json结果值为“自定义测试”。整个配置与测试过程即告完毕。



jdrew

1粉丝 / 0关注

这些人赞过

2

关于我们

  嘉兴想天信息科技有限公司专注于为客户提供最专业的社交解决方案。公司坚持简洁、高效、创新的理念,不断为客户创造奇迹。旗下产品有OpenSNS开源社交系统和OpenCenter开源用户和后台管理系统。

公司

加入我们

400-0573-080

co@ourstu.com

QQ:2565044240


浙ICP备12042711号-5 Powered by OpenSNS

Copyright ©2013-2017 嘉兴想天信息科技有限公司