前言

飞书api文档并没有像钉钉一样直接给出对应的api代码实现,而是给出了接口url和所需参数,通过postman是可以很好的验证,单项目中获取结果还是得用代码实现

<1>以飞书 获取单个部门api 为例,看看飞书api

当前飞书java jdk 版本1.0.17-rc2,依赖如下:

        <!-- https://mvnrepository.com/artifact/com.larksuite.oapi/larksuite-oapi --><dependency><groupId>com.larksuite.oapi</groupId><artifactId>larksuite-oapi</artifactId><version>1.0.17-rc2</version></dependency>

官方api链接: 飞书根据部门id获取当个部门信息(之后官方文档若有改动,请以官方为准)
文档大致内容:

请求

请求头

路径参数

查询参数

1、路径参数必须拼接到请求url后面,下面代码会见到

2、查询参数有user_id_type,非必填,默认open_id,这里要注意,不是根据用户id去查,而是返回的部门领导人id类型是user_id还是open_id
3、查询参数department_id_type,非必填,默认open_department_id,也就是用open_department_id还是用department_id去获取用不详情

<2>api的调用方式

1.httpclient发请求

public static String hcGetDp(String department_id) throws HttpException, IOException {//请求接口String url = "https://open.feishu.cn/open-apis/contact/v3/departments/";// 创建httpClient实例对象HttpClient httpClient = new HttpClient();// 设置httpClient连接主机服务器超时时间:20000毫秒httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(20000);// 创建GET请求方法实例对象//因为是路径参数,所以要直接拼接到url后面GetMethod getMethod = new GetMethod(url+department_id);NameValuePair nameValuePair = new NameValuePair();nameValuePair.setName("department_id_type");nameValuePair.setValue("department_id");NameValuePair[] nValue = new NameValuePair[1];nValue[0] = nameValuePair;getMethod.setQueryString(nValue);// 设置post请求超时时间getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT, 50000);getMethod.addRequestHeader("Content-Type", "application/json");getMethod.addRequestHeader("Authorization", "Bearer t-d5ea464c88c7b22d78a6d2f7613fdbfa7533199b");httpClient.executeMethod(getMethod);String result = getMethod.getResponseBodyAsString();getMethod.releaseConnection();return result;}

我对httpclient使用的也不是很多,参数我就原步照搬,因为看他底层方法有setQueryString(NameValuePair[] params),就直接这样写了,当然喜欢用httpclient的老哥,可以自行封装,可以设置更专业的写法分享出来

2.hutool工具来发请求

    private static void hutoolGetDp(String department_id) {Map<String, Object> body = new HashMap<>();
//        body.put("department_id_type", "open_department_id");body.put("department_id_type", "department_id");String token = "Bearer " + "t-xxxxxxxxxxxxxxxxxxxxxxxxxxxx";String url = "https://open.feishu.cn/open-apis/contact/v3/departments/";String  result =  HttpRequest.get(url+department_id).header("Authorization", token ).form(body).execute().body();System.out.println("================响应结果=================");System.out.println(result);}

hutool写完后眼前一亮,够简单够直接,但是得去获取Authorization

3.官方通用api

    private static void openApiGetDp(String department_id) throws Exception {Map<String, Object> body = new HashMap<>();
//        body.put("department_id_type", "open_department_id");body.put("department_id_type", "department_id");Request<Map<String, Object>, Map<String, Object>> request = Request.newRequest("contact/v3/departments/"+department_id,"GET", AccessTokenType.Tenant, null, new HashMap<>(),Request.setQueryParams(body));Response<Map<String, Object>> response = Api.send(config, request);System.out.println("================响应结果=================");System.out.println(Jsons.DEFAULT_GSON.toJson(response));}

官方参数说明;

// httpPath:API路径(`open-apis/`之后的路径),例如:https://domain/open-apis/contact/v3/users/:user_id,则 httpPath:"contact/v3/users/:user_id"// httpMethod: GET/POST/PUT/BATCH/DELETE// accessTokenType:API使用哪种访问凭证枚举,取值范围:AccessTokenType.App/AccessTokenType.Tenant/AccessTokenType.User,例如:AccessTokenType.Tenant// input:请求体(可能是 new FormData()(文件上传)),如果不需要请求体(例如一些GET请求),则传:null// output:响应体(output := response["data"])// requestOptFns:扩展函数,一些不常用的参数封装,如下:// Request.setPathParams(map[string]object{"user_id": 4}):设置URL Path参数(有:前缀)值,当httpPath="contact/v3/users/:user_id"时,请求的URL="https://{domain}/open-apis/contact/v3/users/4"// Request.setQueryParams(map[string]object{"age":4,"types":[1,2]}):设置 URL query,会在url追加?age=4&types=1&types=2// Request.setResponseStream(),设置响应的是否是流,例如下载文件,这时:output的类型需要实现 java.io.OutputStream 接口// Request.setNotDataField(),设置响应的是否 没有`data`字段,业务接口都是有`data`字段,所以不需要设置// Request.setTenantKey("TenantKey"),以`应用商店应用`身份,表示使用`tenant_access_token`访问API,需要设置// Request.setUserAccessToken("UserAccessToken"),表示使用`user_access_token`访问API,需要设置// Request.setTimeout(int time, TimeUnit timeUnit),设置请求超时的时间

官方api看起来不错,我项目中也有使用,当然POST写法相对简单点,我就不列举POST了,他的Authorization直接用AccessTokenType.Tenant这个进行设置,正常来说传进去config,就已经包含APP_ID和APP_SECRET是可以直接获取t_token的,所以这里只用传config,代码如下:

    //应用Idprivate static final String APP_ID = "cli_aaaaaaaaaaaaa";//应用密钥private static final String APP_SECRET = "xxxxxxxxxxxxxxxxxxxxxxxx";// for Cutome APP(自建应用)private static final AppSettings appSettings = Config.createInternalAppSettings(APP_ID,APP_SECRET,null,null);private static final Config config = new Config(Domain.FeiShu, appSettings, new RStore());

new RStore()我就不贴出来了,其实就是自定义RStore类去实现官方api 的IStore接口

4.官方正在研发的服务api

    private static void getDp(String department_id) throws Exception {ContactService contactService = new ContactService(config);Response<DepartmentPatchResult> response = contactService.getDepartments().get(Request.setTenantKey("Tenant Key")).setDepartmentId(department_id).setDepartmentIdType("department_id").execute();System.out.println("===================响应结果==================");System.out.println(response.getRequestID());System.out.println(response.getHTTPStatusCode());System.out.println(Jsons.DEFAULT_GSON.toJson(response));}

可以看出其实是对通用api的一个封装,我也在使用,larksuite-oapi的jar包里面有,没有又可能还在研发中,或者jar包版本过低

总结

官方服务api更新得非常快,最开始只有几个,现在都有很多了,大部分需求应该够用的,之后有可能像钉钉一样,一段文档,一段api,也可以提前适应一下,最终趋势应该这个服务型api
<如代码有错误请指出,有可能是测试代码和表述代码命名不一样>

飞书开发API的调用相关推荐

  1. Python 接入飞书端口API - 实现共享空间的Excel更新

    目的:接入飞书端口API 实现共享空间内Excel文档的更新 步骤一:发布自己的应用 首先:需要在飞书的开发者平台注册自己的账号. 然后:发布自己的应用,该应用的功能需要自己选择好(如果你的目的仅为更 ...

  2. 01 飞书开发-网页应用JSSDK鉴权流程

    本次飞书网页应用代码示例采用uni-app框架,注重代码的思想,触类旁通 1.1 网页应用 JSSDK鉴权流程 1.1.1 获取tenant_access_token \src\manifest.js ...

  3. 打造个人版微信小程序(1)——本地开发api接口调用

    如果觉得这篇文章对您有所启发,欢迎关注我的公众号,我会尽可能积极和大家交流,谢谢.   从今天开始,开始打造一个个人版的微信小程序,尽早上线,方便大家使用以及技术讨论.这套小程序包括前台.后台.数据库 ...

  4. RPA077-调用飞书API发送文件(.net→c#)

    一.前言 RPA调用各种接口,实现某种该功能,是扩展RPA能力的一种方法. 将接口功能通过C#包装成nupkg,然后可以在UiPath中安装,并像使用其他"活动"(activity ...

  5. Feishu(飞书) 聊天机器人应用(1/3)- 开发快速入门

    目录 飞书与聊天机器人 注册飞书 创建 APP 申请权限 发布新版本 激活并配置 获得组织成员信息 获得 access token 获得用户的 open_id 创建 BOT 推送纯文本消息 推送富文本 ...

  6. 飞书的聊天信息服务器,飞书服务端SDK java

    飞书开放接口SDK 概述 飞书开放平台,便于企业应用与飞书集成,让协同与管理更加高效,概述 飞书开发接口SDK,便捷调用服务端API与订阅服务端事件,例如:消息&群组.通讯录.日历.视频会议. ...

  7. 用Mendix接收飞书消息,查询SAP并返回查询结果

    本例子描述的场景是让用户在飞书聊天群里通过输入凭证单据号,公司法人和财政年度这3个字段,呼叫飞书机器人,飞书机器人在后端查询SAP财务凭证明细信息,返回给飞书聊天群. 整体实现逻辑:在Mendix上创 ...

  8. 飞书开放平台Go-Sdk使用指南

    飞书开放平台提供了Go-Sdk,旨在让开发者便捷的调用飞书开放API.处理订阅的消息事件.处理服务端推送的卡片行为. 安装 go get -u github.com/larksuite/oapi-sd ...

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

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

最新文章

  1. ARP病毒查找与防范
  2. python 底层实现_用Python从底层实现一个多层感知机
  3. mapreduce编程初级实践_涨姿势!2020最好的 10 大国外编程学习网站
  4. 操作系统实验报告14:Peterson 算法
  5. go怎么用改变c语言程序位置,Go与C语言的互操作
  6. c51为啥要宏定义时钟_51单片机时钟实训报告
  7. 大学计算机思维导图_【21计算机考研】改考408+1!上海电力大学翻倍扩招,仍考数据结构!...
  8. 网络通信编程大作业--深度研究爬虫技术
  9. 二项分布的期望方差证明_二项分布的期望和方差
  10. 数字图像处理 - 实验作业一 - Python
  11. 部分女生爱搭配蕾丝的服饰
  12. 微信上传临时素材|微信公众号发送图片
  13. 苹果mac下载了dms文件怎么办?
  14. 第五章 系统方法---------基于业务驱动的企业安全架构(翻译,原作者John Sherwood)----仅学习使用
  15. PHP + elasticsearch的使用方法,PHP使用ES的超级简单方法
  16. 创建采购订单BADI流程
  17. clickhouse 按天、小时、分钟统计数据
  18. A script engine for the specified language can not be created
  19. 12306抢票系统——ER图及数据表
  20. 2019年万围科技共享单车管理解决方案与技术支持

热门文章

  1. c#中用声音提示报警 .
  2. C++中s.find()和s.rfind()的用法
  3. 爬取网易财经中股票的历史交易数据
  4. 华为鸿蒙系统有望搭载手机上吗,华为智选车载智慧屏将12月上市:有望搭载鸿蒙系统...
  5. 腾讯云IDC产品家族重装亮相 加速布局新基建
  6. 错误集锦:在安装docker的时候,发现无法安装(没有可用软件包 docker-ce。 错误:无须任何处理)
  7. AI-多模态-文本->图像-2021:Stable Diffusion【开源】【目前开源模型中最强】
  8. 电路基础--基本定律,等效电阻(三)
  9. java求水电费_水电煤缴费示例代码
  10. VUE整合信通身份证阅读器返回读取到的数据或将身份证图片返回