YesApi 接口文档

1823 关联查询列表数据接口 App.Table.FreeLeftJoinQuery

接口路径(新):http://hd215.api.yesapi.cn/api/App/Table/FreeLeftJoinQuery

接口路径(旧):http://hd215.api.yesapi.cn/?s=App.Table.FreeLeftJoinQuery

接口描述: 关联 有一定复杂度,但可实现功能强大的关联查询,以便实现同时获取两个表单的数据。根据自定义的多个条件(AND或者OR),进行搜索和查询,支持左关联查询,目前只支持关联一个表查询。可以通过文档示例增强对引接口的理解和使用,如有问题,请及时咨询技术客服。

接口标签:免费(每月最高10万次)付费(包月/按量/私服)  热门验签

特别注意:当前 hd215.api.yesapi.cn 为临时接口测试域名!请先完成 绑定独立接口域名后 ,才能正式进行API调用。

接口流量
3
请求协议
HTTP/HTTPS
请求方式
GET/POST(推荐POST)
编码格式
UTF-8
返回格式
JSON

在线测试接口    收藏此接口    在线接口开发    接口请求日记


接口参数 若无特殊说明,接口参数同时支持GET和POST传递;推荐:查询/删除用GET,创建/更新用POST。

参数名字参数类型是否必须默认值备注参数说明
app_key字符串必须最小:32公共参数 开发者应用的app_key,查看我的app_key,如果还没有,可免费注册开通。
sign字符串可选公共参数接口签名,其中:
  • 使用动态签名,签名生成算法请见:如何生成签名,或直接使用封装好的SDK开发包,通过在线测试工具可进行签名的对比和调试。
  • 使用静态签名点击获取我的静态签名
  • 关闭签名,如果不需要签名,可进入小白开放平台接口签名设置关闭或开启签名。
  • 定制签名支持专属签名算法定制开发
uuid字符串可选公共参数 UUID,当前登录的应用会员ID,即全局唯一用户ID,查看我的应用会员。传递此参数后,可以在开放平台查看每日活跃会员统计图表。uuid需要和token一起传递。
token字符串可选公共参数 当前登录会员的会话凭证,可通过会员登录接口获得。uuid需要和token一起传递。
return_data字符串可选0公共参数 数据返回结构,其中:
  • return_data=0,返回完整的接口结果,示例:{"ret":200,"data":{"err_code":0,"err_msg":"","title":"Hi YesApi,欢迎使用小白开放接口!"},"msg":"V3.1.0 YesApi App.Hello.World","_t": 1657513450, "_auth": "9bcd54ff53e71a1d80d37c52bdfabf76"}
  • return_data=1,返回简洁的接口结果,只返回data字段,结构简化一级,更扁平,示例:{"err_code":0,"err_msg":"V3.1.0 YesApi App.Hello.World","title":"Hi YesApi,欢迎使用小白开放接口!"}
model_name字符串必须表单名称(对应在小白开放平台创建时的数据库表名称),查看我的全部表单
model_uuid字符串可选最大:32表单UUID,即对应表单数据里的uuid字段。分为三种情况:
  • model_uuid为@NULL或未提供时(默认值):如model_uuid=@NULL,即不限制uuid,可匹配任意uuid,包括uuid为空和不为空的数据纪录;
  • model_uuid为空字符串:为空字符串时,如model_uuid=,只匹配uuid为空字符串的数据纪录(即游客数据);
  • model_uuid为具体的值:如model_uuid=8AEA2AF1951C0376EC668A74B8CAA64A,则进行精确匹配,只匹配与表单uuid相等的数据纪录。
check_code字符串可选最大:64待检测的口令,仅当在小白开放平台配置口令后才会对此参数进行检测,规则配置教程
join_model_name字符串必须需要关联的表单名称,目前只支持关联一个表
select字符串用,分割可选针对主表的SQL语句的SELECT部分,多个字段用英文逗号分割,如:select=id,uuid。
join_select字符串用,分割必须最小:1针对关联表的SQL语句的SELECT部分,至少需要指定获取一个字段,多个字段用英文逗号分割,如:select=id,uuid。注意:为避免字段名称冲突,关联表字段在接口返回的结果中的名称为:{关联表单名称}_{关联字段名称}。
on字符串JSON格式必须[]用于指定表单关联关系的ON部分,JSON格式,key-value对,key为主表字段名,value为关联表字段名,支持多组。例如:model_name.name = join_model_name.name AND model_name.age = join_model_name.other_age,则接口传递参数为:on={"name":"name","age":"other_age"}
logic枚举类型可选and范围:and/orwhere条件的逻辑组合,logic=and表示逻辑且,logic=or表示逻辑或
where字符串JSON格式可选[["id", ">=", "1"]]SQL语句的WHERE查询条件,JSON格式,格式为:[第一组条件, 第二组条件, ……]。(where和where_X二选一,不可混用,以where_X优先)

写法1:每一组的条件格式为:["字段名", "比较符", "比较值"],其中:
  • 字段名:表单结构中存在的字段,或表字段
  • 比较符:比较符号可以是>、>=、<、<=、<>、!=、EQ、GT、GE、LT、LE、NE、LIKE、NLIKE、IN、NIN、BETWEEN、NBETWEEN
  • 比较值:需要比较的值,不同比较符的比较值格式会有所不同。如果字段是数值类型,请传递数值类型,不要用字符串。
示例:当logic=and, where=[["id",">",9],["id","<=",10]],则表示:id > 9 AND id <= 10。

写法2(Beta):每一组的条件格式可以为:MySQL条件字符串,支持嵌套、组合、函数等,功能更强大,组合更灵活,但要求:
  • 必须符合MySQL语法
  • 一些疑似危险的操作已被禁止
  • 建议掌握MySQL语法的专业开发者使用,并且使用静态参数,开启接口签名,以防SQL注入攻击
示例:当logic=and, where=["id > 9", "id <= 10"],则表示:id > 9 AND id <= 10。

以上两种写法可以混合使用。如果需要有效防止SQL注入,请用写法1;如果需要更强大的条件组合,并且是固定参数条件时,可用写法2。更多示例说明请参考WHERE参数介绍
where_X字符串可选动态条件,优先于where的JSON数据,简化的where条件,更易使用但只支持部分比较符。条件格式:where_ + X(X要换成你的字段名) = 比较符(见下方) + 中横线(-) + 比较值。支持的比较符和示例如下:
  • EQ:等于(默认),如:where_year=EQ-2020,或:where_year=2020,表示年份year等于2020;
  • GT:大于,如:where_year=GT-2020,表示年份year大于2020;
  • GE:大于等于,如:where_year=GE-2020,表示年份year大于或等于2020;
  • LT:小于,如:where_year=LT-2020,表示年份year小于2020;
  • LE:大于等于,如:where_year=LE-2020,表示年份year小于或等于2020;
  • NE:不等于,如:where_year=NE-2020,表示年份year不等于2020;
  • LIKE:模糊匹配,如:where_name=LIKE-小白,表示名字name含有小白的;
  • NLIKE:模糊匹配(排除),如:where_name=NLIKE-小白,表示名字name不包含小白的
  • IN:枚举查询,如:where_year=IN-2020,2021,2022,表示年份year在这三个年份,多个值用英文逗号分割
  • NIN:枚举查询(排除),如:where_year=NIN-2020,2021,2022,表示年份year不在这三个年份,多个值用英文逗号分割
如果同一字段有多个条件,使用双竖线||分割,如:where_year=GT-2000||LT-2020,表示year年份大于2020(logic=and或logic=or)小于2020。(where和where_X二选一,不可混用,以where_X优先)
order字符串JSON格式可选[]针对主表的SQL语句的ORDER部分,JSON格式。具体格式为:[第一组排序,第二组排序,……],可以单个或组合排序。
每一组排序格式为:"字段名 + 空格 + ASC|DESC",其中:
  • ASC:为指定列按升序排列
  • DESC:为指定列按降序排列。
例1:单个排序,order=["id DESC"],表示按ID降序,即最新的在最前面。
例2:组合排序,order=["id DESC", "add_time ASC"],表示id DESC, add_time ASC,即先按ID从大到小,再按创建时间倒序排序。
特别地,RAND表示随机排序,请慎用。
page整型可选1最小:1第几页
perpage整型可选10最小:1;最大:10000分页数量
is_real_total布尔型可选true是否需要真正的总数,1是0否,当表单数据过多时,如果不需要查询真正的总数,将能极大提升接口响应的速度。若为假总数,固定返回9999999。

在线测试

参数是否必填
s 固定
uuid 可选
token 可选
return_data 可选
model_name 必须
model_uuid 可选
check_code 可选
join_model_name 必须
select 可选
join_select 必须
on 必须
logic 可选
where 可选
order 可选
page 可选
perpage 可选
is_real_total 可选

客户端请求示例

查看我的接口域名、app_key和app_secrect 客户端接入指南(如何生成签名) 开启/关闭签名

假设,当前有两个表单,分别是:文章内容表单(article)、文章分类表单(category),其中:

文章内容表单(article)数据如下:
+----+----------------------+----------------------------------------------------------------+------------+---------+
| id | title                | content                                                        | view_times | cate_id |
+----+----------------------+----------------------------------------------------------------+------------+---------+
| 36 | PHP程序员历险记223   | <p>PHP(中文名:“超文本预处理器”)是一种通用开源脚本语言。</p> |        200 |       3 |
| 37 | 小白开放平台更新公告 | <p>1.推出四大优惠券 2.新增#修改会员分组#接口</p>               |        300 |       1 |
| 38 | 我改了标题           | <p>创建或更新非重复新数据接口</p>                              |        260 |       2 |
| 39 | 标签                 | <p>我爱你,中国</p>                                            |        100 |       0 |
+----+----------------------+----------------------------------------------------------------+------------+---------+
4 rows in set

文章分类表单(category)数据如下:
+----+-----------+---------+
| id | cate_name | is_show |
+----+-----------+---------+
|  1 | 大数据    |       0 |
|  2 | 人工智能  |       1 |
|  3 | 编程开发  |       1 |
+----+-----------+---------+
3 rows in set

并且,article.cate_id字段表示分类ID。那么,下面将演示如何进行关联查询。

【关联查询示例1】查询文章内容id = 36的文章信息以及关联的分类信息。

请求:
{你的接口域名}/?s=App.Table.FreeLeftJoinQuery&model_name=article&join_model_name=category&select=id,title,content,view_times,cate_id&join_select=cate_name&on={"cate_id":"id"}&logic=and&where=[["id", "=", "36"]]&app_key={你的app_key}&sign={动态签名}

返回:
{
    "ret": 200,
    "data": {
        "err_code": 0,
        "err_msg": "",
        "total": 1,
        "list": [
        {
            "id": 36,
            "title": "PHP程序员历险记223",
            "content": "<p>PHP(中文名:“超文本预处理器”)是一种通用开源脚本语言。</p>",
            "view_times": 200,
            "cate_id": 3,
            "category_cate_name": "编程开发"
        }
        ],
            "page": 1,
            "perpage": 10
    },
    "msg": "V1.2.28 小白开放接口 App.Table.FreeLeftJoinQuery"
}

【关联查询示例2】查询访问量大于等于100且分类为显示的文章数据。
需要注意,where参数的三元组写法(如上面示例1)默认全部作用于主表单。如果需要对关联表单进行条件判断,需要改用MySQL条件字符串。同时约定:主表单别名为TL(表示Table Left)、关联表单别名为TR(表示Table Right)。下面示例将进行演示。

请求:
{你的接口域名}/?s=App.Table.FreeLeftJoinQuery&model_name=article&join_model_name=category&select=id,title,content,view_times,cate_id&join_select=cate_name&on={"cate_id":"id"}&logic=and&where=["TL.view_times >= 100", "TR.is_show = 1"]&page=1&perpage=10&order=["id ASC", "TR.cate_name DESC"]&app_key={你的app_key}&sign={动态签名}

请求(如果使用where_TL_X / where_TR_X 的写法,默认以TL为主):
{你的接口域名}/?s=App.Table.FreeLeftJoinQuery&model_name=article&join_model_name=category&select=id,title,content,view_times,cate_id&join_select=cate_name&on={"cate_id":"id"}&logic=and&where_TL_view_times=GE-100&where_TR_is_show=1&page=1&perpage=10&order=["id ASC", "TR.cate_name DESC"]&app_key={你的app_key}&sign={动态签名}

返回:
{
    "ret": 200,
    "data": {
        "err_code": 0,
        "err_msg": "",
        "total": 2,
        "list": [
        {
            "id": 36,
            "title": "PHP程序员历险记223",
            "content": "<p>PHP(中文名:“超文本预处理器”)是一种通用开源脚本语言。</p>",
            "view_times": 200,
            "cate_id": 3,
            "category_cate_name": "编程开发"
        },
        {
            "id": 38,
            "title": "我改了标题",
            "content": "<p>创建或更新非重复新数据接口</p>",
            "view_times": 260,
            "cate_id": 2,
            "category_cate_name": "人工智能"
        }
        ],
            "page": 1,
            "perpage": 10
    },
    "msg": "V1.2.28 小白开放接口 App.Table.FreeLeftJoinQuery"
}

如果需要对关联表单的字段进行排序,可以添加前缀【TR.】。

接口返回及数据结构

返回字段类型说明
ret整型接口状态码,200表示成功,4xx表示客户端非法请求,5xx表示服务端异常,查看异常错误码
dataobject/array/混合接口返回的业务数据,由不同的API接口决定不同的数据返回字段和结构。当return_data=1时,接口只会返回此data字段。
data.err_code整型状态操作码,0成功;1开发类错误,查询失败(表单不存在或查询错误);2应用层规则拦截,拦截后可以小白开放平台查看日记
data.err_msg字符串错误提示信息,err_code非0时参考此提示信息
data.total整型数据的总条目数量
data.list字符串查询的结果列表数据
data.page整型当前第几页
data.perpage整型当前分页数量
msg字符串提示信息,面向技术人员的帮助或错误提示信息
_t整数服务器当时Unix时间戳,例如:1657513450
_auth字符串反向数字签名,可用于客户端进行反向验证,防止数据篡改,例如:9bcd54ff53e71a1d80d37c52bdfabf76。验证算法:_auth = md5(data返回的JSON字符串 + _t当前时间戳字符串 + APP_SECRECT密钥字符串),若需要关闭或开启请提交工单

ret异常错误码

错误码错误类型错误描述信息解决方法
ret = 200成功请求成功
ret = 400客户端非法请求非法请求,参数错误1、根据接口文档的接口参数,提供正确的参数
ret = 401客户端非法请求用户未登录,或登录凭证已过期1、如果用户未注册,请先用注册接口;2、如果注册未登录或会话过期,请先用登录接口
ret = 402客户端非法请求IP已被黑名单拦截1、进入接口IP设置,移除IP黑名单设置
ret = 403客户端非法请求IP未命中白名单1、进入接口IP设置,添加IP白名单设置,或清空IP白名单设置
ret = 404客户端非法请求接口服务不存在1、查看小白接口大全,确保接口服务名称拼写正确
ret = 406客户端非法请求非法app_key,请核对你所在的接口域名1、在我的套餐查看并核对接口域名
ret = 407客户端非法请求当前应用已过期1、进行续费或续约,延长应用有效期
ret = 408客户端非法请求当前应用存在异常,已被封号1、联系在线客服人工处理(系统升级维护中,或 应用存在异常已被平台封号)
ret = 409客户端非法请求签名错误1、使用在线测试,校正签名;2、关闭特定或全部签名设置;3、如果过期,可以进行续约/升级
ret = 410客户端非法请求权限不足,非系统管理员1、应用权限不足,可联系在线客服咨询沟通
ret = 411客户端非法请求权限不足,应用管理员未登录1、请提供应用管理员的admin_uuid和admin_token参数后重试
ret = 412客户端非法请求权限不足,非应用管理员1、请在果创云把会员设置为管理员
ret = 413客户端非法请求本月接口流量超出,已被临时冻结1、开通接口流量叠加包,或升级套餐
ret = 414客户端非法请求并发过高1、请降低请求频率,检测是否有死循环调用,或是否被他人恶意使用。如果流量确实很大,可联系在线客服进行定制化或私有云部署。
ret = 415客户端非法请求接口已被开发者关闭1、接口已被开发者关闭,请进入果创云接口开关重新开启
ret = 416客户端非法请求权限不足,个人免费版套餐无法使用专业版接口1、请先升级终身会员/标准版/旗舰版/企业版
ret = 417客户端非法请求子应用异常,如:子应用签名错误/已过期/流量不足1、使用主账号在管理和配置 客户端/子应用
ret = 500小白接口异常如果出现此错误,请联系技术人员处理1、进入QQ交流群897815708,反馈问题;2、或者提交工单,一天内回复

常见问题FAQ

Q1 问:出现 414 Request-URI Too Large 时怎么解决?答:对于全部参数,改用POST方式传递,并且从GET链接里面去掉。

Q2 问:浏览器请求和在线测试接口正常,但本地程序无法正常获取接口结果答:需要注意UTF编码,以及存在中文和特殊字符时的URL编码。GET请求参数应统一进行URL编码后再请求,POST表单数据正常传递即可。

Q3 问:请求接口时提示JSON格式错误答:请先阅读,然后检测本地传递的参数是否符合JSON格式,使用JSON在线工具辅助检测,注意双引号和特殊符号。确认无误后再重新请求API接口。

Q4 问:出现 405 不允许跨域请求 时怎么办?答:可以追加GET参数 &yesapi_allow_origin=1,或参考用反向代理解决跨域问题等3种解决方案。

Q4 问:在wx内无法访问yesapi.cn或okayapi.com域名,怎么办?答:由于曾经短链跳转使用被wx误封域名,可以帮忙进行申诉。申诉后截图联系我们,获取15万次接口流量奖励。