禅道登录-调用API方式

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 禅道提供了API机制方便于大家和其他的系统进行集成,API机制也都是基于http协议的,返回的数据以json格式存储。禅道的API都是需要先登录后才能进行接口调用(登录返回的cookie需要在之后的每次请求中携带用于验证身份信息)。网上关于禅道API调用机制的说明相对较少,接下来我会从postman调用和Java代码两种方式来体现禅道整个登录过程

禅道提供了API机制方便于大家和其他的系统进行集成,API机制也都是基于http协议的,返回的数据以json格式存储。禅道的API都是需要先登录后才能进行接口调用(登录返回的cookie需要在之后的每次请求中携带用于验证身份信息)。网上关于禅道API调用机制的说明相对较少,接下来我会从postman调用和Java代码两种方式来体现禅道整个登录过程


注意:个别信息比较私密模糊展示不便于公开,请见谅!!


流程图


af96b6d0e30577e936ead13cf2bb8078.jpg


第一步、获取session


首先调用禅道提供的获取SessionID的API


f8cec42bedf42f7fc56f8303ca033268.png


postman:


7201addd966f4b43ae12f62815660980.png


接口返回的data中的sessionID对应的value值就是我们需要获取的sessionID值,用于后续禅道登录验证


Java代码:


//调用禅道接口获取sessionID
String session = doGet("http://127.0.0.1/zentao/api-getSessionID.json", null, false);
// json解析器-GSON
JsonParser parse = new JsonParser();
//将接口返回的字符串解析成json格式
JsonObject jsonSession = (JsonObject) parse.parse(session);
//将json格式中的data解析出来
JsonObject jsonObj = (JsonObject) parse.parse(jsonSession.get("data").getAsJsonPrimitive().getAsString());
//获取key为sessionID的值
String sessionID = jsonObj.get("sessionID").toString();


第二步、登录-验证用户身份


现在我们就可以使用sessionID来用户身份验证进行登录了,登录的时候需要提供用户名和密码,变量名如下:account,password


postman:


将上一步获取到的sessionID放到url地址中,在Params以key、value的形式放置登陆的用户名和密码


faaa57f826add980972db88a13a1f0de.png


Java代码:


//存储登录需要使用到的信息
Map map = new HashMap();
//账号
map.put("account", "account");
//密码
map.put("password", "password");
//sessionID
map.put("zentaosid", "sessionID");
//登录url
String loginResult = doGet("http://127.0.0.1" +"//zentao/user-login-XXXX=.json", map, true);


第三步、获取cookie


登录成功之后我们把登录返回的cookie获取出来,用于调用其他API的携带信息了


说明:在解析响应体信息时,


postman:


在上一步登录之后返回的Cookie中包含了名为【zentaosid】的key、value,其中zentaosid为cookie名,相应的value为值,我们只需要获取出来便可以进行其他API的调用了


44825d004a8f4ea1b12d9912d4a2881a.png


Java代码:


/**
* 用来存取cookies信息的变量.
*/
private static CookieStore cookieStore;
//获取登录过后的cookie 存入 cookieStore对象
public static String GetCookies(HttpGet get) throws IOException {
        String result = null;
        try {
            if (null == cookieStore) {
                cookieStore = new BasicCookieStore();
            }
            //获取响应
            CloseableHttpClient httpClient = HttpClients.custom().setDefaultCookieStore(cookieStore).build();
            //执行请求
            CloseableHttpResponse response = httpClient.execute(get);
            result = EntityUtils.toString(response.getEntity(), "utf-8");
            // 获取cookies信息
            List<Cookie> cookies = cookieStore.getCookies();
            //解析出zentaosid
            for (Cookie cookie : cookies) {
                String name = cookie.getName();
                String value = cookie.getValue();
                if (name.equals("zentaosid")) {
                    Constant.ZENTAOID = value;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
}


参考代码--doGet()


作用:执行url请求调用


//向指定url发起请求,可携带参数,并选择是否携带cookie
    public static String doGet(String url, Map params, boolean isCookie) {
        //获取httpclient客户端
        CloseableHttpClient httpclient = HttpClients.createDefault();
        String resultString = "";
        CloseableHttpResponse response = null;
        try {
            URIBuilder builder = new URIBuilder(url);
            if (null != params) {
                for (Object key : params.keySet()) {
                    String keyStr = key.toString();
                    String result = params.get(key).toString();
                    builder.setParameter(keyStr, result);
                }
            }
            //Get请求
            HttpGet get = new HttpGet(builder.build());
            //判断是否需要传入cookie
            //是:调用GetCookies()方法获取cookie
            //否:执行请求
            if (!isCookie) {
                //执行请求
                response = httpclient.execute(get);
                //200表示接口调用成功
                if (200 == response.getStatusLine().getStatusCode()) {
                    //HttpEntity表示http的request和resposne实体,它由消息头和消息体组成。
                    //从HttpEntity中可以获取http请求头和回应头,也可以获取http请求体和回应体信息。
                    HttpEntity entity = response.getEntity();
                    resultString = EntityUtils.toString(entity, "utf-8");
                }
            } else {
                //调用GetCookies()方法获取cookie
                resultString = GetCookies(get);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (null != response) {
                try {
                    response.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != httpclient) {
                try {
                    httpclient.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return resultString;
    }


参考链接:zentaoPHP二次开发简介 - zentaoPHP二次开发 - 易软天创开发者中心


总结


注意:个别信息比较私密模糊展示不便于公开,请见谅!!


如果有想要交流的内容欢迎在评论区进行留言,如果这篇文档受到了您的喜欢那就留下你点赞、收藏脚印支持一下博主哦~

相关文章
|
7月前
|
JSON 应用服务中间件 API
利用Grafana的API Key+Nginx反向代理实现Grafana免登录访问
利用Grafana的API Key+Nginx反向代理实现Grafana免登录访问
534 1
|
4月前
|
API 网络架构
【Azure Developer】使用 Microsoft Graph API查看用户状态和登录记录
【Azure Developer】使用 Microsoft Graph API查看用户状态和登录记录
|
7月前
|
小程序 API 开发者
微信小程序授权登录流程以及应用到的API
微信小程序授权登录流程以及应用到的API
492 0
|
7月前
|
小程序 API
微信小程序登录授权流程及所用API
微信小程序登录授权流程及所用API
318 0
|
API PHP
企业微信授权登录服务端API实战开发(2):php程序开发获取访问用户身份
企业微信授权登录服务端API实战开发(2):php程序开发获取访问用户身份
202 0
|
API
企业微信授权登录服务端API实战开发(1):企业微信环境部署
企业微信授权登录服务端API实战开发(1):企业微信环境部署
249 0
|
小程序 Shell API
Go+gRPC-Gateway(V2) 微服务实战,小程序登录鉴权服务(四):自动生成 API TS 类型
Go+gRPC-Gateway(V2) 微服务实战,小程序登录鉴权服务(四):自动生成 API TS 类型
289 0
Go+gRPC-Gateway(V2) 微服务实战,小程序登录鉴权服务(四):自动生成 API TS 类型
|
API PHP
【laravel项目】@4 微信授权登录 --dingo接管api路由之后,自定义路由(2)
【laravel项目】@4 微信授权登录 --dingo接管api路由之后,自定义路由
117 0
【laravel项目】@4 微信授权登录 --dingo接管api路由之后,自定义路由(2)
|
中间件 API PHP
【laravel项目】@4 微信授权登录 --dingo接管api路由之后,自定义路由(1)
【laravel项目】@4 微信授权登录 --dingo接管api路由之后,自定义路由
133 0
【laravel项目】@4 微信授权登录 --dingo接管api路由之后,自定义路由(1)
|
9天前
|
人工智能 自然语言处理 API
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动
谷歌推出的Multimodal Live API是一个支持多模态交互、低延迟实时互动的AI接口,能够处理文本、音频和视频输入,提供自然流畅的对话体验,适用于多种应用场景。
55 3
Multimodal Live API:谷歌推出新的 AI 接口,支持多模态交互和低延迟实时互动