目前不推荐使用此工具,请使用新发布的 kintone Java Client。
Index
概要
本篇介绍于2018年12月发布的“kintone Java SDK”。
有了本次发布的“kintone Java SDK”,使用Java进行批处理或开发手机应用程序时,可以更加简单方便地执行REST API。
※与之前发布的“kintone API SDK(β) for Java”不同的是,这是新的库。
另外,“kintone Java SDK”和以前发布的“kintone Node.js SDK”及与本次同时期发布的“kintone iOS SDK”的设计思路类似。
因此,虽然存在着开发语言的差异,但验证及连接、类、方法等各个地方的声明都一样。
GitHub
https://github.com/kintone-labs/kintone-java-sdk
文档
https://kintone-labs.github.io/kintone-java-sdk/latest/
本次通过举例说明kintone Java SDK的导入方法及执行。
在Eclipse上进行开发。请在可执行的环境下尝试。
Eclipse
注意事项
根据许可协议,可对代码进行更改、再发布以及用于商业目的。
导入方法
安装
“kintone Java SDK”使用Apache maven进行库安装。另外,在eclipse下使用maven时,使用了M2Eclipse这个插件。
Apache maven以及M2Eclipse的安装,请参考其官网。
https://maven.apache.org/index.html
maven和M2Eclipse安装完成后,请按照以下步骤,做成maven项目,导入kintone Java SDK。
1.在~\apache-maven-3.6.2\conf目录下的“setting.xml”里添加以下内容
//设置本地仓库 <localRepository>C:/apache-maven-3.6.2/repository\</localRepository>
2.用Eclipse创建Maven项目
- 选择Eclipse的【File > New > Maven Project】
- 在Group Id中输入任意值,Artifact Id中输入“Sample_project”,其他默认值,点击完成按钮
- 在任意的包内创建主类“SampleMain.java”
3.导入setting.xml
- 点击Eclipse的“Window > Preferences”,选择“Maven > User Settings”
- 在“User Settings”中选择步骤1中设置的“setting.xml”,点击“Apply and Close”
4.编辑步骤2中创建的项目内的pom.xml
- 在pom.xml的<dependencies>标签内添加以下内容
※1.groupId、artifactId的值固定
※2.version的值预定在每次升级时进行适当的更改。
<dependency> <groupId>com.cybozu.kintone</groupId> <artifactId>kintone-sdk</artifactId> <version>0.2.0</version> </dependency>
5.右击在步骤2中创建的项目,选择“ Run As > Maven install”
6.右击步骤2中创建的项目,选择“ Maven > Update Project”
范例
例举文档中Quickstart的简单范例代码,对执行方法和应答进行说明。
在范例代码的功能是从kintone应用中获取一条记录。
准备阶段是创建kintone应用,根据下表添加字段,生成API令牌(必要的访问权限=查看)。
字段类型 | 字段代码 |
---|---|
单行文本框 | text |
范例代码(文件名:SampleMain.java)
复制以下范例代码,替换“sample_project”内的“SampleMain.java”。
API令牌、验证信息、子域名、应用ID等请根据自身的环境做适当的更改。
package main; import java.util.HashMap; import com.cybozu.kintone.client.authentication.Auth; import com.cybozu.kintone.client.connection.Connection; import com.cybozu.kintone.client.exception.KintoneAPIException; import com.cybozu.kintone.client.model.record.GetRecordResponse; import com.cybozu.kintone.client.model.record.field.FieldValue; import com.cybozu.kintone.client.module.record.Record; public class SampleMain { public static void main(String[] param) { System.out.println("test start"); final String API_TOKEN = "api_token"; // Init authentication module Auth kintoneAuth = new Auth(); kintoneAuth.setApiToken(API_TOKEN); // Init Connection without "guest space ID" final String DOMAIN = "{yourdomain}.cybozu.cn"; Connection kintoneConnection = new Connection(DOMAIN, kintoneAuth); // Init Record Module Record kintoneRecord = new Record(kintoneConnection); // execute get record API final Integer APP_ID = 00; final Integer RECORD_ID = 0; try { GetRecordResponse responese = kintoneRecord.getRecord(APP_ID, RECORD_ID); HashMap<String, FieldValue> record = responese.getRecord(); System.out.println("record ID :" + record.get("$id").getValue()); System.out.println("text field :" + record.get("text").getValue()); System.out.println("test end"); } catch (KintoneAPIException e) { e.printStackTrace(); System.err.println(e.getErrorResponse().getMessage()); } } }
执行
右击Eclipse上编写的代码,选择“Debug>2 Java Application”。
应答的范例
应答成功时,会返回如下应答。
范例代码解说
Authentication
以下解说范例代码第18~23行。
这部分是为了连接kintone的验证方法。
// Init authentication module Auth kintoneAuth = new Auth();
使用Authentication类设置密码验证、API令牌验证、Basic验证。
验证的优先顺序如下。(参考:kintone REST API共通规格)
1.密码验证
2.API令牌验证
※kintone Java SDK不支持会话验证。
密码验证
final String USERNAME = "username"; final String PASSWORD = "password"; kintoneAuth.setPasswordAuth(USERNAME, PASSWORD);
API令牌验证
final String API_TOKEN = "api_token"; kintoneAuth.setApiToken(API_TOKEN);
Basic验证
final String BASIC_USERNAME = "basic_username"; final String BASIC_PASSWORD = "basic_password"; kintoneAuth.setBasicAuth(BASIC_USERNAME, BASIC_PASSWORD);
Connection
第25~27行的Connection类用于设置连接。
使用连接目标域名信息以及刚才完成的验证信息连接到kintone环境。
// Init Connection without "guest space ID" final String DOMAIN = "{yourdomain}.cybozu.cn"; Connection kintoneConnection = new Connection(DOMAIN, kintoneAuth); // for guest space final String DOMAIN = "{yourdomain}.cybozu.cn"; final int GUEST_SPACE_ID = 0; Connection kintoneConnection = new Connection(DOMAIN, kintoneAuth, GUEST_SPACE_ID);
Record
最后是第32~44行。
// execute get record API final Integer APP_ID = 00; final Integer RECORD_ID = 0; try { GetRecordResponse responese = kintoneRecord.getRecord(APP_ID, RECORD_ID); HashMaprecord = responese.getRecord(); System.out.println("record ID :" + record.get("$id").getValue()); System.out.println("text field :" + record.get("text").getValue()); System.out.println("test end"); } catch (KintoneAPIException e) { e.printStackTrace(); System.err.println(e.getErrorResponse().getMessage()); }
这部分实际是执行kintone的REST API的处理。
范例中,使用Record类的getRecord函数获取1条记录。
getRecord(appID, recordID)
参数
名称 | 数据类型 | 必须 | 说明 |
---|---|---|---|
appID | Integer | 〇 | 应用ID |
recordID | Integer | 〇 | 记录编号 |
Record类里,如下文所述,除了获取1条记录外,还有其他各种各样的函数。
关于其他功能
Record类
此类中定义了如刚才范例代码中用到的函数等。
其定义的函数包含对应用的记录进行获取、添加、更新、删除、更改状态等类,以及对回复进行获取、填写、删除等函数。
以下是其所包含的类的部分例子。
getRecord
getRecords
addRecord
addRecords
updateRecords
deleteRecords
updateRecordStatus
getComments
addComment
deleteComment
其他还有各种各样的函数。详情请参考文档。
关于Record类
https://kintone-labs.github.io/kintone-java-sdk/latest/reference/record/
关于BulkRequest类
可对多个应用同时发起多个API请求。
BulkRequest中可使用的函数请参考以下文档。
关于BulkRequest类
https://kintone-labs.github.io/kintone-java-sdk/latest/reference/bulk-request/
另外,执行BulkRequest时需要注意以下内容。
执行BulkRequest并获取应答时,执行execute函数。
除了excecute函数外,一次最多只能执行20个函数。
BulkRequest范例
BulkRequest bulkRequest = new BulkRequest(kintoneConnection); try { bulkRequest.addRecord(APP_ID, addData); bulkRequest.addRecords(APP_ID, addDataList); bulkRequest.updateRecordByID(APP_ID, updateRecID, updateData, null); bulkRequest.deleteRecords(APP_ID, delIdList); BulkRequestResponse responses = bulkRequest.execute(); System.out.println(responses.getResults()); } catch (KintoneAPIException e) { e.printStackTrace(); System.err.println(e.getErrorResponse().getMessage()); }
App类
此类定义了用于获取应用信息的函数。
需要有应用的查看权限。
关于其包含的函数,请参考以下文档。
关于App类
https://kintone-labs.github.io/kintone-java-sdk/latest/reference/app/
App范例
App app = new App(kintoneConnection); try { AppModel response = app.getApp(APP_ID); System.out.println(response.getCreator().getName()); } catch (KintoneAPIException e) { e.printStackTrace(); System.err.println(e.getErrorResponse().getMessage()); }
关于类型
kintone Java SDK中,各API的应答分别使用了独自的类型。
各自的构造函数以及可以使用的方法都不一样,使用前请认真阅读文档。
https://kintone-labs.github.io/kintone-java-sdk/latest/reference/model/app/app/app-model/
最后
在使用Java进行批处理以及手机应用的开发时,可以更加方便地执行kintone REST API了。
希望您能借此机会好好利用kintone Java SDK。
本Tips在2019年2月版 kintone中确认过。
回复(8)
嗯
不过我觉得这个定时执行的请求应该不是一样的吧,不然不太可能报的错不一样。然后也希望从报错提示431展开更多的调查。
还有两个限制也请注意。
kintone本身有2个限制
1.同时可访问请求是100个。
2.1个domain一天最多10000条
我们使用的是getApp方法,method GET是在SDK中指定的,设定了job每5分钟执行一次,
从上午9点开始执行,一般是在下午4,5点的时候出现上述431错误,
当设定5秒钟执行一次大概1个小时出现问题,执行次数是400次左右,
日志中输出的发送数据都是固定的没有变化,我们也没有设定任何header数据。
您说的Content-Type我们也没有指定用的默认的,
查看了kintone sdk源码默认是在Connection.class中 93行:
connection.setRequestProperty("Content-Type", "application/json");
这个问题我们也觉得很奇怪,希望能得到您的帮助,谢谢!
发送的header里的Content-Type是自己指定的把,是不是发送的payload并不是json,数据本身有问题呢。请求头部过长是不是可能调用了某个get请求的api,然后把一些没必要的数据放到了请求里。
我们使用SDK制作了一个数据备份的服务,在进行测试的时候,
发现当发送的请求达到一定的数量之后,发送的request header的内容发生了变化,
【Content-Type】从【application/json;charset=utf-8】变成了【text/html;charset=iso-8859-1】
导致服务器在接收到请求后,直接返回431的错误(431 - 请求头部字段太大)
只要请求发送数量达到一定数量,必然没重复发生同样的问题。
把服务重启后,再次执行一样的操作又能正常运行,但请求达到一定数量后,又会重复发生一样的问题。
是kintone服务器对于外部请求有数量限制还是SDK本身有什么问题?
Delete Records只能删除整条数据,无法做到对一条数据中的某一个内容进行删除。
如果只想对某一个内容删除的话你可以试试更新数据。更新时可以把你想要删除的那个值置空就可以了。
你可以参考以下链接:
更新记录(PUT)
https://cybozudev.kf5.com/hc/kb/article/201605/
获取发生了更改的字段及表格内的行对象
https://cybozudev.kf5.com/hc/kb/article/206917/#step11
更新记录时的表格操作技巧
https://cybozudev.kf5.com/hc/kb/article/211417/#
你好,再次的麻烦到你,想跟你确认一下关于kintone API:Delete Records
是删除kintone画面指定数据的API方法,请问一下这个API能否删除指定数据下明细行(SUBTABLE)的数据呢?
嗯,我们已经注意到了这个问题,但是我们会在近期更新另一个新版本的java sdk。你可以自行修改这个sdk或者等待新版。
你好,在使用最新JAVA api 0.6.0版本时发现,如果kintone画面上有CALC时会报空指针异常
原因是:
麻烦帮忙看下,谢谢