最新更新时间:2021年07月27日16:05:07
《猛戳-查看我的博客地图-总有你意想不到的惊喜》

文章背景:最近在开发一个需求,在一个PC端中台系统上(前端是antD搭建的React项目+后端是eggJS搭建的Node项目),前端交互点击一个按钮,需要在Node服务器上完成一系列动作:在GitLab上创建一个新仓库 -> 在Node服务器上动态初始化一个react项目 -> 改写这个项目中的一写文件内容 -> 将这个react项目push到新仓库

本文内容:在进行代码管理时,通常用到的是gitlab,但大多数人用的都是界面化操作,比如:创建仓库、查询仓库、修改仓库信息,实际上gitlab也可以通过发送接口请求的方式进行操作,本文主要介绍如何调用gitlab的API接口、不同接口的含义

预备知识

接口路径
  • gitlab API主域名和接口前置路径
//主域名
let host = "https://gitlab.***.com";// ***-公司的gitlab的主域名
//接口前置路径
let mainPath = "/api/v3";

注意:v3有可能是v2、v4…,每个公司的不一样

API地址列表
  • 从帮助(http://gitlab.***.com/help)进入
    在这里插入图片描述
  • 直接从地址(http://gitlab.***.com/help/api/README.md)进入
    在这里插入图片描述
private_token
介绍
  • Gitlab的所有API都需要提供private_token参数进行用户身份认,如果没有提供或者提供的private_token不合法,API将会返回401错误码
  • private_token是用来代表用户身份的字符串,和用户是一一对应的关系,http请求中包含这个就可以免输入用户名和密码。
获取
  • 方案一:查看帐号设置(Profile Settings -> Account)
    在这里插入图片描述
  • 方案二:通过API

接口路径: /session

postman的方式如下

在这里插入图片描述

服务发请求的方式如下

const child_process = require("child_process");
let curl = `curl --request POST --data "login=wanshaobo&email=***&password=***" ${host}${mainPath}/session`;
let buffer = child_process.execSync(curl);//发送同步请求
let resultJson = buffer && buffer.toString();
let result = JSON.parse(resultJson);
//result结果
console.log(result.private_token)
{
    "name": "万少博",
    "username": "wanshaobo",
    "id": 1,
    "state": "active",
    "avatar_url": "https://work.***.com/photo/1.jpg",
    "web_url": "http://gitlab.***.com/u/wanshaobo",
    "email": "wanshaobo@***.com",
    "private_token": "***"
}

注意:
git config --global user.name #获取用户名
git config --global user.email #获取用户邮箱

http请求方式
  • gitlab api限制了请求的方法,一般查询请求是GET,创建请求是POST,修改请求是PUT,删除请求是DELETE,方法写错了api将返回405 Method Not Allowed错误。
  • 分页查询需要携带参数per_page和page
`curl --request GET --data "private_token=***&per_page=10&page=1" ${host}${mainPath}/projects/owned`;

项目中用到的API

获取自己名下的所有项目
  • /projects/owned
let curl = `curl --request GET --data "private_token=***" ${host}${mainPath}/projects/owned`;
获取命名空间
  • /namespaces
let curl = `curl --request GET --data "private_token=***" ${host}${mainPath}/namespaces`;
创建仓库
  • /projects
let curl = `curl --request POST --data "visibility_level=0&private_token=***&namespace_id=***" ${host}${mainPath}/projects?name=new_demo`;

注意:参数visibility_level是仓库的访问权限,可以设置0,10,20

在这里插入图片描述

API大全

  • Users 用户
接口类型返回值
/usersGET用户列表
/users/:idGET用户详情
/usersPOST创建用户
  • Session 会话
接口类型返回值
/sessionPOST用户帐号详情
  • Projects including setting Webhooks
  • Project Snippets
  • Services
  • Repositories 项目仓库
  • Repository Files 仓库代码文件
  • Commits 提交
  • Tags
  • Branches 分支
  • Merge Requests 代码合并
  • Issues
  • Labels
  • Milestones
  • Notes (comments) 注释
  • Deploy Keys
  • System Hooks
  • Groups 群组
接口类型返回值
/groupsGETGet a list of groups
/groups/:id/projectsGETGet a list of projects in this group
  • Namespaces 命名空间
接口类型返回值
/namespacesGETGet a list of namespaces
/namespaces?search=foobarGETGet all namespaces that match your string in their name or path
  • Settings
  • Keys
参考资料

感谢阅读,欢迎评论^-^

打赏我吧^-^

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐