×
PhalApi 2.x 前言

PhalApi 2.x 快速开发

1.1 下载与安装1.2 运行Hello World1.3 如何请求接口服务1.4 接口响应与在线调试1.5 Api接口层1.6 Domain领域层和ADM模式1.7 Model数据层与数据库操作1.8 单元测试1.9 自动加载和PSR-41.10 接口文档

PhalApi 2.x 数据库

2.1 数据库链接2.2 数据库与NotORM2.3 数据库使用和查询2.4 数据库分库分表策略2.5 连接多个数据库2.6 打印和保存SQL语句2.7 定制你的Model基类

PhalApi 2.x 高级专题

3.1 PhalApi 2.x 接口参数3.2 PhalApi 2.x 配置3.3 PhalApi 2.x 日志3.4 PhalApi 2.x 缓存3.5 PhalApi 2.x 过滤器3.6 PhalApi 2.x COOKIE3.7 PhalApi 2.x 加密3.8 PhalApi 2.x 国际化3.9 PhalApi 2.x CURL请求3.10 PhalApi 2.x 工具和杂项3.11 PhalApi 2.x DI服务汇总

PhalApi 2.x 发现更多

4.1 PhalApi 2.x 扩展类库4.2 PhalApi 2.x SDK包的使用4.3 PhalApi 2.x 脚本命令

关于PhalApi 2.x

5.1 PhalApi 2.x 版本完美诠释5.2 PhalApi 2.x 升级指南5.3 PhalApi 2.x VS PhalApi 1.x

4.2 PhalApi 2.x SDK包的使用


SDK包列表

已经支持的SDK有:

一句话描述

为了给客户端统一接口请求调用的规范性、流畅性和简单易懂,我们特别为此使用了内部领域特定语言: 接口查询语言 (Api Structured Query Language) 。

外部DSL

从外部DSL的角度来看待接口查询的操作

create

withHost host
withFilter filter
withParser parser

reset   #特别注意:重复查询时须重置请求状态

withService service
withParams paramName1 paramValue1
withParams paramName2 paramValue2
withParams ... ...
withTimeout timeout

request

根据此设计理念,各客户端语言都可以实现此接口请求的操作。

接口查询语言设计理念与示例

文法:create -> with -> request

所用到的查询文法如下(通常从上往下依次操作,顺序不强制):

操作 参数 是否必须 是否可重复调用 作用说明
create 必须 可以,重复调用时新建一个实例,非单例模式 需要先调用此操作创建一个接口实例
withHost 接口域名 必须 可以,重复时会覆盖 设置接口域名,如:http://demo.phalapi.net/
withFilter 过滤器 可选 可以,重复时会覆盖 设置过滤器,与服务器的PhalApiDI()->filter对应,需要实现PhalApiClientFilter接口
withParser 解析器 可选 可以,重复时会覆盖 设置结果解析器,仅当不是JSON返回格式时才需要设置,需要实现PhalApiClientParser接口
reset 通常必须 可以 重复查询时须重置请求状态,包括接口服务名称、接口参数和超时时间
withService 接口服务名称 通常必选 可以,重复时会覆盖 设置将在调用的接口服务名称,如:Site.Index
withParams 接口参数名、值 可选 可以,累加参数 设置接口参数,此方法是唯一一个可以多次调用并累加参数的操作
withTimeout 超时时间 可选 可以,重复时会覆盖 设置超时时间,单位毫秒,默认3秒
request 必选 可以,重复发起接口请求 最后执行此操作,发起接口请求

JAVA示例

以JAVA版本为例,演示如何调用:
最简单的调用,也就是默认接口的调用:

PhalApiClientResponse response = PhalApiClient.create()
       .withHost("http://demo.phalapi.net/")  //接口域名
       .request();                            //发起请求

通常的调用,即有设置接口服务名称、接口参数和超时:

PhalApiClientResponse response = PhalApiClient.create()
       .withHost("http://demo.phalapi.net/")
       .withService("Site.Index")          //接口服务
       .withParams("username", "dogstar")     //接口参数
       .withTimeout(3000)                     //接口超时
       .request();

高级复杂调用,即设置了过滤器、解析器的操作:

PhalApiClientResponse response = PhalApiClient.create()
       .withHost("http://demo.phalapi.net/")
       .withService("Site.Index")
       .withParser(new PhalApiClientParserJson()) //设置JSON解析,默认已经是此解析,这里仅作演示
       .withParams("username", "dogstar")
       .withTimeout(3000)
       .request();

更好的建议

不支持面向对象的实现方式

此接口查询的用法是属于基础的用法,其实现与宿主语言有强依赖关系,在不支持面向对象语言中,如javascript,可以使用函数序列的方式,如:

create();
withHost('http://demo.phalapi.net/');
withService('Site.Index');
withParams('username', 'dogstar');
withTimeout(3000);
var rs = request();

封装自己的接口实例

通常,在一个项目里面我们只需要一个接口实例即可,但此语言没默认使用单例模式,是为了大家更好的自由度。
基于此,大家在项目开发时,可以再进行封装:提供一个全局的接口查询单例,并组装基本的接口公共查询属性。

即分两步:初始化接口实例,以及接口具体的查询操作。

如第一步先初始化:

PhalApiClient client = PhalApiClient.create()
     .withHost("http://demo.phalapi.net/")
     .withParser(new PhalApiClientParserJson());

第二步进行具体的接口请求:

PhalApiClientResponse response = client.reset()  #重复查询时须重置
     .withService("Site.Index")
     .withParams("username", "dogstar")
     .withTimeout(3000)
     .request();

这样,在其他业务场景下就不需要再重复设置这些共同的属性(如过滤器、解析器)或者共同的接口参数。

超时重试

当接口请求超时时,统一返回 ret = 408,表示接口请求超时。此时可进行接口重试。

如:

PhalApiClient client = PhalApiClient.create()
     .withHost("http://demo.phalapi.net/")

PhalApiClientResponse response = client.request();

if (response.getRet() == 408) {
     response = client.request(); //请求重试
}

分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)