背景

由于业务需求,目前开发的系统中需要调用飞书的接口,打通飞书和该系统,实现统一管理员工的目的。
这次主要开发的接口是获取飞书部门和员工列表的接口、通过企业自建应用发送飞书消息的接口、获取飞书打卡日报的接口。开发过程中还是挺烦躁的,飞书提供的SDK还不完善,部分接口是未封装的,需要map接收然后转化数据格式,开发文档中也没有提供SDK的说明,需要的接口都是自己在类里面找到的。

开发流程

pom文件引入依赖

<dependency><groupId>com.larksuite.oapi</groupId><artifactId>larksuite-oapi</artifactId><version>1.0.5</version>
</dependency>


上图可知,飞书的SDK能够支持的服务只有4个

上图的项目结构中我们可以看到,提供的服务在service中,由于官方文档中没有提供那个功能需要调用的接口代码,所以需要我们自己去这写服务代码中找到需要的接口,下面我将用获取部门的接口为例,来说一下如何找到自己需要的接口。

获取部门列表接口开发(有SDK接口可调用)


从开发文档中我们可以看到获取部门信息列表的接口请求路径是https://open.feishu.cn/open-apis/contact/v3/departments
由项目结构的contact可知,通讯录相关的接口应该是在这个目录下,于是我们进入这个目录。

由于上图的红框中代码basepath等于"contact/v3",我们需要请求的地址也是有这个的,所以确定我们找对了地方

通过页面搜索功能,终于找到了对应的请求方法,看样子,就是这个接口了。

由上图可知,我们需要的这个接口在一个内部类里面,因此我们需要先生成一个这个内部类的对象。

通过idea提示可以看到,这个地方是return了这个类对象的,跳过去看看

这可以看到,是一个list方法生成出来的,而且是Departments的对象调用的,ok,那我们再去看如何生成Departments对象

在这个类的构造方法中我们可以看到,生成ContactService对象的时候就帮我们new号了对象,所以我们直接用get方法获取就可以了。
那调用路径我们走通了,即下图代码

 response = contactService.getDepartments().list().execute();

还有问题,new ContactService时需要提供Config对象,继续找

// 企业自建应用的配置// AppID、AppSecret: "开发者后台" -> "凭证与基础信息" -> 应用凭证(App ID、App Secret)// VerificationToken、EncryptKey:"开发者后台" -> "事件订阅" -> 事件订阅(Verification Token、Encrypt Key)。public static final AppSettings appSettings = Config.createInternalAppSettings("AppID", "AppSecret", "VerificationToken", "EncryptKey");// 当前访问的是飞书,使用默认存储,更多可选配置,请看:README.zh.md->高级使用->如何构建整体配置(Config)。public static final Config config = new Config(Domain.FeiShu, appSettings, new DefaultStore());

在github上飞书提供的README.zh.md里找到的,就直接用了,懒得去代码里找了
把上面代码的AppID和AppSecret换成我们自建应用的就好了,另外两个参数我没有,直接设置未null;
此时我们知道了如何请求这个接口,但是请求参数还没设置

通过开发文档我们可以看到需要的请求参数,然后根据上面的方法设置就好了,所以最终代码是这样的:

 response = contactService.getDepartments().list().setDepartmentIdType("department_id").setParentDepartmentId(id).setPageToken(pageToken).setFetchChild(true).execute();

这样,我们请求部门列表的接口就完成了。

打卡数据获取(无SDK接口调用)

做这个接口的时候我也有点懵,这没给我可调用的接口我咋弄啊。。。
后来,我在GitHub上看到了他们的示例代码里,看到了

索嘎,原生模式
原生模式发送请求得到数据也很简单,但是!!!!后续的数据处理真的头大。

Map<String, Object> message = new HashMap<>();
message.put(EnumsFeishuCheckInDayData.user_ids.name(), userIds);
message.put(EnumsFeishuCheckInDayData.check_date_from.name(), startTime);
message.put(EnumsFeishuCheckInDayData.check_date_to.name(), endTime);
Request<Map<String, Object>, Map<String, Object>> request = Request.newRequest(EnumFeishuUrl.CheckResults.getUrl(),"POST", AccessTokenType.Tenant, message, new HashMap<>());
Response<Map<String, Object>> response = Api.send(config, request);

上面就是请求接口的代码了,很简单,主要是使用Request<Map<String, Object>, Map<String, Object>>这个类做一个请求,然后使用Api.send发送出去,得到返回结果就行。
Request.newRequest的参数是:请求地址、请求类型、令牌类型、输入参数、输出参数

  • 1、这里的令牌类型由于是企业自建应用,所以使用AccessTokenType.Tenant,它有3个取值:AccessTokenType.App / AccessTokenType.Tenant / AccessTokenType.User,从名字上来看就能理解什么意思。
  • 2、输入参数很容易理解,就是我们的请求参数,用map装就好
  • 3、输出参数这里需要注意,这个对象是接收返回值的,经过我的实验,输出参数不同,获得的返回值也不同,but我自己建的对象发过去没转过来,可能是我技术不过关,建的对象不对吧。。。所以我选择了用map接收返回值
    (还是想吐槽一下,没有文档可以参考,全靠自己摸索,飞书可真有你的)
    然后噩梦就来了,我需要把map转化为我自己服务端的对象,比较痛苦,就不展示了。

总结

Java端调用飞书的接口熟练了还是挺简单,但是我刚开始开发的时候,看开发文档一脸懵逼,网上也没有这方面的文章(这也是我写这篇的初衷),全是自己摸索着来,还是比较痛苦的。

Java端飞书接口开发相关推荐

  1. electron打包在linux环境运行,通过Electron基于网页版打包Linux端飞书(Electron-Lark)...

    在Linux系统下使用飞书,可使用下面提供的通过Electron基于网页版打包的Linux端飞书(Electron-Lark),提供deb和tar.xz包下载,支持Deepin.Ubuntu等版本. ...

  2. Java顺丰同城接口开发

    顺丰同城接口 顺丰同城接口 阅读官方文档 工具类的介绍 SignUtil类 JsonUtil类 HttpUtil类 Post方法 DateUtil类 UrlGenerateUtil类 配置文件编写 R ...

  3. java后台支付宝支付接口开发

    需要阿里的jar包,可以自行去支付宝开发平台下载,下面分享仅作参考,欢迎各位大佬指教 1.工具类 import org.springframework.core.io.ClassPathResourc ...

  4. java短信发送接口开发

    发送短信验证码几乎是现在每个网站都要使用到的一个功能,如注册的时候要发送短息验证码,修改密码的时候也要发送.但是第三方提供给我们的接口只是一个方法而已,并没有提供给我们更多的一个良好,可读性强的接口, ...

  5. Java端字节跳动接口调用SDK包

    最近因为需求需要对接字节跳动的小程序,需要调用后端的接口,但是官方没有提供对应的SDK包,所以就自写了一套SDK代码,代码有问题或者有疑问的地方希望可以指出,谢谢; 有需要的朋友自提 贴上Github ...

  6. java调用银联支付接口开发,银联在线Java接口开发

    netpayclinet.jar 根据项目工程的需要放置对应路径下 用于提供数字签名的方法调用 MerPrk.key 可以放置到任意路径下,但是需要调用方法指定文件位置和名称 商户签名私钥 PgPub ...

  7. java支付接口开发原理_java对接微信支付接口开发的过程是什么?

    java对接微信支付接口开发的过程是什么?以下是小编整理的java对接微信支付接口实现的方法和过程,有需要的朋友可以学习以下的java对接微信支付接口内容. java对接微信支付接口开发的过程是什么? ...

  8. 飞书组织架构同步(部门和用户) Java-API 的使用

    飞书组织架构同步(部门和用户) Java-API使用 概述 1.飞书JavaSDK 飞书开放接口JavaSDK是飞书官方开发的一套封装了飞书开放平台请求的Java借口,便于企业应用整合到飞书平台. 具 ...

  9. 将 ChatGPT 引入你的飞书

    将 ChatGPT 引入你的飞书 1. 创建一个飞书开放平台应用,并获取到 APPID 和 Secret 访问 开发者后台,创建一个名为 ChatGPT 的应用,并上传应用头像.创建完成后,访问[凭证 ...

最新文章

  1. java toolkit invoker_关于invokeInitFramework 方法未实现的问题
  2. pytorch分布式报错 “tensor must be non-overlapping and dense“
  3. Element Form表单布局(一行多列)
  4. DevExpress 汉化(简单、实用、快速) 转
  5. Mac在github中管理自己的代码(入门篇)
  6. 【渝粤教育】国家开放大学2018年秋季 2707T种植业基础 参考试题
  7. web产品设计的经典著作
  8. 征服ASP.NET Ajax典型应用 (试读)
  9. 菲尼克斯2961105继电器REL-MR- 24DC/21
  10. 图形界面介绍Create Pin Blockage
  11. 青蛙跳台阶c语言递归函数,【递归】青蛙跳台阶问题
  12. python中quit函数用法_quit(code=None)函数和exit(code=None)函数的使用举例
  13. 如何用ggplot2绘制漂亮的统计图形
  14. matlab提取车牌字符程序,matlab - 如何使用Matlab提取和识别车牌号?
  15. [hive]hive加载本地数据,然后删除了本地数据也删除了表,这时可以在hdfs垃圾箱找到
  16. CSDN、Jupyter notebook、有道云笔记和Typora四者通用的Markdown语法
  17. verilog i2c 通用控制模块
  18. RedHat7文件及文件目录命令
  19. サザンカ(sasanqua)平假名
  20. 0078-【生活百科】-日程、笔记管理软件之大比拼

热门文章

  1. android 按钮救星,按钮救星下载-按钮救星 -apk3安卓网
  2. ppt怎么做流程图饼图_环形流程图如何绘制?5分钟让你精通绘制技巧
  3. 十四、应用监控(2)
  4. c#小作业 简单复数计算
  5. java 线程间通信的几种方式
  6. Kyligence at Microsoft Build,助力世界非凡洞见
  7. mac安装MySQL-very easy
  8. 崛起2010:大陆手机芯片“F4”
  9. 测试模式点滴:模仿者模式
  10. 怎么写单元测试android,Android上的单元测试