精华内容
下载资源
问答
  • API调用

    2020-08-04 10:48:43
    在做aspnet+MVC的系统时,需要调用别的系统的api接口,更新他们那边的数据 在网上找了很多,本来是想写后台的,因为可以判断接口是否成功然后再更新自己这边的表 但是大多是js调用的,类似这样 var postdata =...
  • API调用步骤

    千次阅读 2019-04-18 10:37:18
    1 API调用步骤 2 调用API需要三个基础条件

    1 API调用步骤

    2 调用API需要三个基础条件

    展开全文
  • JIRA REST API调用方式

    万次阅读 2018-10-12 16:49:21
    2、JIRA REST API调用方式 2.1、权限验证 权限验证采用basic authentication这种验证方式,主要考虑到简单易行、操作方便、内部系统。具体的操作方法为在请求的http header中添加Authorization参数,取值为Basic ...

    关键字

    • 阿里巴巴
    • 云效RDC
    • Aone
    • JIRA
    • 高德地图
    • 德国大众

    1、JIRA介绍

    JIRA平台是国际上比较流行的项目缺陷追踪管理平台,与阿里云RDC(云效)系统类似,均为缺陷跟踪平台。

    目前像阿里巴巴内部云效即Aone系统其实也与JIRA做了相关对接,比如高德地图-德国大众项目中就涉及Aone-Jira对接,同步两个平台的部分核心操作。所以了解下JIRA API还是有点用处,碰到了这方面的需求就可以应对。

    2、JIRA REST API调用方式

    2.1、权限验证

    权限验证采用basic authentication这种验证方式,主要考虑到简单易行、操作方便、内部系统。具体的操作方法为在请求的http header中添加Authorization参数,取值为Basic base64(username:password),这里的username和password是企业自己部署的JIRA平台的登陆账号和密码,如下图:
    在这里插入图片描述
    通过上述方式即可完成权限验证,就上图中的项目详情接口查询的http请求来举例,下图中为请求结果:
    在这里插入图片描述
    *权限验证说明文档:https://developer.atlassian.com/cloud/jira/platform/jira-rest-api-basic-authentication/

    2.2、数据请求

    2.2.1、数据接口文档

    *数据接口说明文档:https://developer.atlassian.com/cloud/jira/platform/rest/v2/ 目前开放的接口正式版本为v2,接口文档中的v3为公共测试版本,不要使用。

    2.2.2、问题列表查询

    请求URL:https://XXX/rest/api/2/search?jql=project=10223+and+assignee=abc+order+by+updated&startAt=0&maxResults=10
    请求方式:GET
    返回问题详情结果:

    {
    "expand":"names,schema",
    "startAt":0,
    "maxResults":1,
    "total":33,
    "issues":
    	[
            {详细问题结构参考},
            {详细问题结构参考}
    	]
    }
    

    2.2.3、问题详情查询

    请求URL:https://XXX/rest/api/2/issue/{issueIdOrKey}
    请求方式:GET
    返回问题详情结果:

    {
      "id": "10002",
      "self": "http://your-domain.atlassian.net/rest/api/2/issue/10002",
      "key": "EX-1",
      "fields": {
        "watcher": {
          "self": "http://your-domain.atlassian.net/rest/api/2/issue/EX-1/watchers",
          "isWatching": false,
          "watchCount": 1,
          "watchers": [
            {
              "self": "http://your-domain.atlassian.net/rest/api/2/user?accoundId=99:27935d01-92a7-4687-8272-a9b8d3b2ae2e",
              "name": "mia",
              "displayName": "Mia Krystof",
              "active": false
            }
          ]
        },
        "attachment": [
          {
            "id": 10001,
            "self": "https://your-domain.atlassian.net/rest/api/2/attachments/10001",
            "filename": "debuglog.txt",
            "author": {
              "self": "http://your-domain.atlassian.net/rest/api/2/user?username=mia",
              "key": "mia",
              "accountId": "99:27935d01-92a7-4687-8272-a9b8d3b2ae2e",
              "name": "mia",
              "avatarUrls": {
                "48x48": "http://your-domain.atlassian.net/secure/useravatar?size=large&ownerId=mia",
                "24x24": "http://your-domain.atlassian.net/secure/useravatar?size=small&ownerId=mia",
                "16x16": "http://your-domain.atlassian.net/secure/useravatar?size=xsmall&ownerId=mia",
                "32x32": "http://your-domain.atlassian.net/secure/useravatar?size=medium&ownerId=mia"
              },
              "displayName": "Mia Krystof",
              "active": false
            },
            "created": "2018-10-10T23:10:51.169+0000",
            "size": 2460,
            "mimeType": "text/plain",
            "content": "https://your-domain.atlassian.net/jira/attachments/10001",
            "thumbnail": "https://your-domain.atlassian.net/jira/secure/thumbnail/10002"
          }
        ],
        "sub-tasks": [
          {
            "id": "10000",
            "type": {
              "id": "10000",
              "name": "",
              "inward": "Parent",
              "outward": "Sub-task"
            },
            "outwardIssue": {
              "id": "10003",
              "key": "EX-2",
              "self": "http://your-domain.atlassian.net/rest/api/2/issue/EX-2",
              "fields": {
                "status": {
                  "iconUrl": "http://your-domain.atlassian.net/images/icons/statuses/open.png",
                  "name": "Open"
                }
              }
            }
          }
        ],
        "description": "example bug report",
        "project": {
          "self": "http://your-domain.atlassian.net/rest/api/2/project/EX",
          "id": "10000",
          "key": "EX",
          "name": "Example",
          "avatarUrls": {
            "48x48": "http://your-domain.atlassian.net/secure/projectavatar?size=large&pid=10000",
            "24x24": "http://your-domain.atlassian.net/secure/projectavatar?size=small&pid=10000",
            "16x16": "http://your-domain.atlassian.net/secure/projectavatar?size=xsmall&pid=10000",
            "32x32": "http://your-domain.atlassian.net/secure/projectavatar?size=medium&pid=10000"
          },
          "projectCategory": {
            "self": "http://your-domain.atlassian.net/rest/api/2/projectCategory/10000",
            "id": "10000",
            "name": "FIRST",
            "description": "First Project Category"
          },
          "simplified": false,
          "style": "classic"
        },
        "comment": [
          {
            "self": "http://your-domain.atlassian.net/rest/api/2/issue/10010/comment/10000",
            "id": "10000",
            "author": {
              "self": "http://your-domain.atlassian.net/rest/api/2/user?accoundId=99:27935d01-92a7-4687-8272-a9b8d3b2ae2e",
              "name": "mia",
              "displayName": "Mia Krystof",
              "active": false
            },
            "body": "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque eget venenatis elit. Duis eu justo eget augue iaculis fermentum. Sed semper quam laoreet nisi egestas at posuere augue semper.",
            "updateAuthor": {
              "self": "http://your-domain.atlassian.net/rest/api/2/user?accoundId=99:27935d01-92a7-4687-8272-a9b8d3b2ae2e",
              "name": "mia",
              "displayName": "Mia Krystof",
              "active": false
            },
            "created": "2018-10-10T23:10:51.172+0000",
            "updated": "2018-10-10T23:10:51.198+0000",
            "visibility": {
              "type": "role",
              "value": "Administrators"
            }
          }
        ],
        "issuelinks": [
          {
            "id": "10001",
            "type": {
              "id": "10000",
              "name": "Dependent",
              "inward": "depends on",
              "outward": "is depended by"
            },
            "outwardIssue": {
              "id": "10004L",
              "key": "PRJ-2",
              "self": "http://your-domain.atlassian.net/rest/api/2/issue/PRJ-2",
              "fields": {
                "status": {
                  "iconUrl": "http://your-domain.atlassian.net/images/icons/statuses/open.png",
                  "name": "Open"
                }
              }
            }
          },
          {
            "id": "10002",
            "type": {
              "id": "10000",
              "name": "Dependent",
              "inward": "depends on",
              "outward": "is depended by"
            },
            "inwardIssue": {
              "id": "10004",
              "key": "PRJ-3",
              "self": "http://your-domain.atlassian.net/rest/api/2/issue/PRJ-3",
              "fields": {
                "status": {
                  "iconUrl": "http://your-domain.atlassian.net/images/icons/statuses/open.png",
                  "name": "Open"
                }
              }
            }
          }
        ],
        "worklog": [
          {
            "self": "http://your-domain.atlassian.net/rest/api/2/issue/10010/worklog/10000",
            "author": {
              "self": "http://your-domain.atlassian.net/rest/api/2/user?accoundId=99:27935d01-92a7-4687-8272-a9b8d3b2ae2e",
              "name": "mia",
              "displayName": "Mia Krystof",
              "active": false
            },
            "updateAuthor": {
              "self": "http://your-domain.atlassian.net/rest/api/2/user?accoundId=99:27935d01-92a7-4687-8272-a9b8d3b2ae2e",
              "name": "mia",
              "displayName": "Mia Krystof",
              "active": false
            },
            "comment": "I did some work here.",
            "updated": "2018-10-10T23:10:51.220+0000",
            "visibility": {
              "type": "group",
              "value": "jira-developers"
            },
            "started": "2018-10-10T23:10:51.220+0000",
            "timeSpent": "3h 20m",
            "timeSpentSeconds": 12000,
            "id": "100028",
            "issueId": "10002"
          }
        ],
        "updated": 1,
        "timetracking": {
          "originalEstimate": "10m",
          "remainingEstimate": "3m",
          "timeSpent": "6m",
          "originalEstimateSeconds": 600,
          "remainingEstimateSeconds": 200,
          "timeSpentSeconds": 400
        }
      }
    }
    

    2.2.4、项目问题更新

    请求URL:https://XXX/rest/api/2/issue/{issueIdOrKey}
    请求方式:PUT
    待测试(需要在JIRA上创建测试票)

    2.2.5、项目问题评论创建

    请求URL:https://XXX/rest/api/2/issue/{issueIdOrKey}/comment
    请求方式:POST
    待测试(需要在JIRA上创建测试票)

    2.2.6、项目问题附件添加

    请求URL:https://XXX/rest/api/2/issue/{issueIdOrKey}/attachments
    请求方式:POST
    待测试(需要在JIRA上创建测试票)

    3、JAVA测试

    http请求方法

    	@Override
        public JiraHttpResponse doGetMethod(String url) {
            JiraHttpResponse jiraHttpResponse = new JiraHttpResponse();
            boolean success = false;
            String exception = "";
            String body = "";
    
            logger.info("request url:" + url);
            logger.info("request method: get");
            if (!Constant.emptyString.equals(url)) {
                CloseableHttpClient closeableHttpClient = createCloseableHttpClient();
                RequestConfig defaultConfig = RequestConfig.custom().setCookieSpec(CookieSpecs.STANDARD).build();
    
                HttpGet httpGet;
                HttpResponse httpResponse;
                httpGet = new HttpGet(url);
                // 设置CookieSpecs策略
                httpGet.setConfig(defaultConfig);
                // 定义请求header和鉴权权限参数
                httpGet.setHeader("Accept","application/json");
                httpGet.setHeader("Content-Type","application/json");
                httpGet.setHeader("Authorization","Basic " + bash64Util.getBase64(configBean.getJiraAccount() + ":" + configBean.getJiraPassword()));
    
                try {
                    httpResponse = closeableHttpClient.execute(httpGet);
    
                    logger.info("httpStatus=" + httpResponse.getStatusLine().getStatusCode());
                    if (HttpStatus.SC_OK == httpResponse.getStatusLine().getStatusCode()) {
                        HttpEntity httpEntity = httpResponse.getEntity();
                        if (httpEntity != null) {
                            body = EntityUtils.toString(httpEntity,"UTF-8");
                            logger.info("body length:" + body.length());
                            success = true;
                        } else {
                            exception = "JIRA请求返回实体为空!";
                        }
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                    exception = "JIRA数据请求失败!";
                } finally {
                    closeHttpClient(closeableHttpClient);
                }
            } else {
                exception = "JIRA请求地址为空!";
            }
    
            jiraHttpResponse.setSuccess(success);
            jiraHttpResponse.setErrorMessage(exception);
            jiraHttpResponse.setBody(body);
            logger.info(jiraHttpResponse.toString());
    
            return jiraHttpResponse;
        }
    

    请求结果:

    2018-10-12 15:03:46.671  INFO 107496 --- [959D39DD333BC-0] c.a.c.j.s.impl.HttpClientServiceImpl     : request url:https://XXX/rest/api/2/search?jql=project=10223+and+assignee=abc+order+by+updated&startAt=0&maxResults=10
    2018-10-12 15:03:46.672  INFO 107496 --- [959D39DD333BC-0] c.a.c.j.s.impl.HttpClientServiceImpl     : request method: get
    2018-10-12 15:03:47.298  INFO 107496 --- [959D39DD333BC-0] com.amap.chexian.jira.util.Bash64Util    : Bash64Utils.getBash64FromUrl bash64 size:28
    2018-10-12 15:03:52.416  INFO 107496 --- [959D39DD333BC-0] c.a.c.j.s.impl.HttpClientServiceImpl     : httpStatus=200
    2018-10-12 15:03:52.681  INFO 107496 --- [959D39DD333BC-0] c.a.c.j.s.impl.HttpClientServiceImpl     : body length:235270
    2018-10-12 15:03:52.683  INFO 107496 --- [959D39DD333BC-0] c.a.c.j.s.impl.HttpClientServiceImpl     : JiraHttpResponse{success=true, errorMessage='', body='{"expand":"schema,names","startAt":0,"maxResults":10,"total":34,"issues":[]}'}
    

    4、参考资料

    1、JIRA REST API测试样例 https://developer.atlassian.com/server/jira/platform/jira-rest-api-examples/
    2、JIRA API说明文档 https://developer.atlassian.com/cloud/jira/platform/rest/v2/
    3、JIRA JQL语法说明 https://www.atlassian.com/blog/jira-software/jql-the-most-flexible-way-to-search-jira-14
    4、JIRA 实现基础 https://blog.csdn.net/liumiaocn/article/details/81301550

    展开全文
  • gitlab的api调用

    千次阅读 2017-02-09 15:35:56
    gitlab的api调用 gitlab的api调用 gitlab的api调用 gitlab的api调用

    统计gitlab的用户和project听起来感觉要搬砖,so我决定研究下api看看有没有批量操作的方法

    https://docs.gitlab.com/ee/api/README.html

    地址
    里面讲的很详细,重点要这么几个
    1、要有token,这个做认证的
    Token有三种我先用/profile/account
    kjQCfxiRhGBy8Wrzvyjq
    这是7.10的版本

    这里写图片描述
    这里写图片描述
    这是8.11.2

    这里写图片描述

    这里写图片描述
    2、用起来

    curl --header "PRIVATE-TOKEN: ********" "https://gitlab.bigdata.le.com/api/v3/projects"

    测试一个自己本地gitlab

    curl --header "PRIVATE-TOKEN: eNwQyvZjQSFd_8-ArxcJ" --header "SUDO: dingyunlong" "http://ubuntu/api/v3/projects"

    这里写图片描述

    展开全文
  • 好玩的API调用之---三种翻译API调用

    万次阅读 2017-04-25 21:44:35
    好玩的API调用之—三种翻译API调用更多技术文章请访问我的个人博客http://www.rainweb.site平时写程序经常需要用到一些服务,像翻译,天气预报,星座什么的,我一般都是用Python写个爬虫去提供这些服务的网站爬数据...

    更多技术文章请访问我的个人博客http://www.rain1024.com

    好玩的API调用之—三种翻译API调用

    平时写程序经常需要用到一些服务,像翻译,天气预报,星座什么的,我一般都是用Python写个爬虫去提供这些服务的网站爬数据,但是有些网站对爬虫有很多限制,一些关键字会定时更改,就像中国天气网经常变更HTML标签的class值,这就需要时常维护爬虫,而聚合数据API只对普通用户提供一个免费API接口,简直垃圾,而网上的一些网站其实有开放的API供开发者调用,所以我想着把自己发现的好玩的API和自己写的爬虫写个博客专题供大家参考,我会继续补充和维护。

    第二个专题是关于翻译功能的API调用,这个功能提供的网站有很多,我一开始是用爬虫爬有道翻译网站来实现翻译功能,后来发现有道是提供API的,这就很尴尬了,在写有道翻译爬虫的时候我还在想为什么网易的网站这么好爬,越来人家根本不在乎我这些小用户,后来发现了webXML也提供这个服务,这次就写这三个吧。

    1.关于有道翻译的爬虫我以前在博客里发过,这里不做解释,感觉挺傻的,就好像明明开着门,我却非要翻墙进去。

    网址戳这里:http://www.rainweb.site/index.php/2017/02/05/python-article23/

    2.有道API的网址http://fanyi.youdao.com/openapi?path=data-mode,需要先申请一个key,很快的。然后可以直接调用了,下面是官网给的调用方法和返回数据格式,直接使用get请求就可以,返回的翻译结果很详细。我直接贴图,不写了。

    web8.jpg

    web9.jpg

    web10.jpg

    3. webXML的网址在这里:http://ws.webxml.com.cn//WebServices/TranslatorWebService.asmx/getEnCnTwoWayTranslator?Word=string,比起有道,webXML不需要申请,直接使用get请求就可以调用,把后面的string改成自己要翻译的单词或汉语就可以,但它只返回XML格式数据,而且翻译内容比较简单,这是效果图,有需要post请求的可以参考下图。

    web11.jpg
    web12.jpg

    更多技术文章请访问我的个人博客http://www.rain1024.com

    展开全文
  • Java 谷歌翻译 api 调用

    万次阅读 多人点赞 2019-06-22 13:22:34
    在公司大佬的指点下, 写了个破解谷歌翻译的工具类,能破解谷歌... 3 根据 word,tk ,组装 url 访问 谷歌翻译 api 调用如下:public static void main(String[] args) { String word = "Hello!";
  • LibSVM Java API调用示例程序

    千次下载 热门讨论 2012-12-16 21:14:38
    LibSVM Java API调用示例程序 Eclipse 完整工程可以运行 相关详情见http://blog.csdn.net/yangliuy/article/details/8041343#comments 3行程序搞定SVM分类-用JAVA程序调用LibSVM API 最简单的示例 欢迎关注我的博客...
  • 好玩的API调用之—天气预报的API调用与爬虫 更多技术文章请访问我的个人博客http://www.rainweb.site平时写程序经常需要用到一些服务,像翻译,天气预报,星座什么的,我一般都是用Python写个爬虫去提供这些服务的...
  • zabbix api调用

    千次阅读 2015-03-12 17:41:37
    zabbix api调用api能干什么Zabbix API allows you to programmatically retrieve and modify the configuration of Zabbix and provides access to historical data. It is widely used to: Create new ...
  • 中国地图api调用,谷歌地图api调用说明! 转自: 谷歌地图API官方博客(英文) 作者:Pamela Fox 翻译:Chenfei 原文地址: 在我们发布谷歌地图上的那个“我的地图”编辑器的时候,开发者的反应是“太...
  • javascript怎么实现调用api的功能,api调用功能的语句的格式是怎么样的?
  • CloudStack API调用

    千次阅读 2014-05-28 11:19:19
    1. CloudStack API调用 1.1. 制作API请求 所有的CloudStack API请求是以HTTP GET / POST有一个关联的命令和任何参数的形式提交的。无论在HTTP或HTTPS中请求都由一下组成: l CloudStack API URL:这是Web服务的...
  • java实现百度统计api调用

    千次阅读 热门讨论 2017-12-26 10:39:07
    java百度统计api调用
  • 通过REDIS实现限制API调用次数

    千次阅读 2020-07-06 06:52:07
    在对外提供api接口时,往往需要对api接口进行限制,某些情况下还需要做好防止接口被刷的功能。利用redis的自增计数特性可以很轻易的实现该功能。 关于Spring boot等项目集成redis就不再多说,这里... # api调用次数,
  • PowerShell-4.API调用以及DLL调用

    千次阅读 2016-12-14 20:01:58
    PowerShell-4.API调用以及DLL调用
  • Ceph API微服务开发--存储集群API调用

    千次阅读 2018-05-15 15:28:24
    目标:开发Ceph存储集群API调用微服务环境:IntelliJ IDEA步骤:librados库简介->存储集群API调用程序编写->API调用测试->Spring Boot微服务改造->运行测试参考:...
  • 百度地图api调用

    千次阅读 2017-03-01 15:33:25
    百度地图api调用 在html5网站中很多企业需要用到的企业地址位置。大多调用第三方的地图api来进行制作。 目前比较主流的第三方地图插件有百度、高德、腾讯、搜狗、谷歌(国内暂不支持)等,他们的引用方式大同小异...
  • 网课查题接口API调用文档

    千次阅读 2020-04-26 12:31:56
    网课查题接口API调用文档 接口地址:http://120.26.88.13/new/api.php 适用场景 超星网课题库查询 请求方式 查询API服务地址: URL http://120.26.86.13/new/api.php 请求方式 GET 请求参数 ...
  • RK1808 RKNN API调用流程

    千次阅读 2019-12-17 10:52:17
    RKNN API调用流程: 通过该API去调用NPU(神经网络计算单元): 1.读取rknn模型文件(使用RKNN模型工具生成的.rknn文件)到内存 2.使用rknn_init进行context初始化,加载rknn模型 3.使用rknn_query获取input,output的属性...
  • API调用次数限制实现

    万次阅读 2016-05-21 20:24:42
    API调用次数限制实现 参考资料:  1. https://zhuanlan.zhihu.com/p/20872901?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io Token BucketRedis IncrRedis EvalBetter Rate Limiting Wit
  • 雅虎天气API调用

    万次阅读 2013-11-18 18:15:47
    雅虎天气API调用: 1.调用方法:http://weather.yahooapis.com/forecastrss?w=2502265,绿色字体为城市代号 2.如何获取城市代码:(以广州为例)   ...
  • 百度人脸识别API调用

    万次阅读 2018-06-27 21:48:12
    写在开头: ...hmpl=facemidyear,版权归原作者所有,仅供本人记录备忘,如有侵权,请...2、本文涉及一些专业词汇,如果您无法分清百度云和百度网盘的区别,不知道API和接口权限、接口调用,那么您将无法理解本文所说...
  • prometheus api调用

    千次阅读 2019-10-30 18:21:58
    库 "github.com/prometheus/client_golang/api" Pro "github.com/prometheus/client_golang/api/prometheus/v1" ...var systemPublicEndpoint api.Client //连接prometheus,无多集群管理时无需传入...
  • 效果如下:调用:www.webxml.com.cn调用:data.cma.cn如下:参考网站:城市天气数据获取接口:http://blog.csdn.net/u011331731/article/details/72765410  [python] 中国气象局 api 调用 : python 入门:...
  • Web Api 调用时出现405错误解决方案

    千次阅读 2019-07-08 16:37:43
    Web Api 调用时出现405错误 之前可以调用成功,说明配置没问题 说明: .net core WebApi 在配置终结点时adress不需要指定svc,但是wcf服务需要 错误提示: System.ServiceModel.ProtocolException: The remote ...
  • 小程序·云开发的HTTP API调用丨实战

    千次阅读 2019-09-25 02:42:23
    小程序云开发之httpApi调用。 小程序云开发之httpApi调用(返回“47001处理”) 技术栈 采用 nodejs + express 搭建web服务器,采用 axios 请求第三方 httpApi nodejs express axios 项目结构 通过应用生成器工具 ...
  • ``` http://XX.XX.XX.XX:XXXX/v1/data-rest/swagger-ui.html#!/EventDate_Service_API/getStatisDetailUsingGET ``` 各位大神,这个样子的API要怎么调用啊,用postman贴上去直接发送没响应。是哪里操作问题么。
  • 基于 python 的语音识别 API 调用

    千次阅读 2018-04-19 23:31:35
    API 调用需要身份认证。我们首先需要注册并获得 AppID 和 AppKey。 在官网注册后,进入控制台,创建一个新应用,并在接口选择栏,为应用勾选“语音识别”。应用创建成功后,记下 AppID 和 AppKey。 2. 接口鉴权 ...
  • 好玩的API调用之---IP地址查询API

    千次阅读 2017-04-25 20:32:32
    好玩的API调用之—IP地址查询API 更多技术文章请访问我的个人博客http://www.rainweb.site平时写程序经常需要用到一些服务,像翻译,天气预报,星座什么的,我一般都是用Python写个爬虫去提供这些服务的网站爬数据...
  • (总)百度AI 平台API调用

    千次阅读 2018-04-09 10:09:52
    涉及内容如下:AccessToken获取自然语言API调用,代码参数设置代码修改中出现的错误,及最终的方法 错误提示:"error_code": 282004,error_msg":"invalid parameter(s)" not a vali...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 112,872
精华内容 45,148
关键字:

api调用