Gitlabへ移行した際の、使えるAPI(v4)メモ

**backlog**から**gitlab**へ移行する事があったので、
つかえそうなAPIをつらつらメモっていきます。
プロジェクト150個近くある、、リポジトリは200個近く。。長い道のり（泣）

### jq コマンドをインストールしておくと、curlコマンドで帰ってきたjsonを見やすく整形できるのでおすすめ。macならサクッとインストール！

```
$ brew install jq
```



まず、アクセストークンを用意しておく、gitlabにログインし、 自分のアイコン　＞　設定　＞　アクセストークンから生成すると取得できる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/37406/7a9ac00e-d291-89ab-36f7-a27a2336388e.png)

# 移行に使ったAPI群

## ユーザー（個人）での扱い

## プロジェクト一覧取得

``` 〜Private-Token: ***********〜 ```
に管理画面からコピーしたアクセストークンを入れる

```
curl --header "Private-Token: ***********" "https://gitlab.com/api/v4/users/hogeproject/projects?visibility=private" | jq .
```

``` ?visibility=private ```はプライベートリポジトリ


### ユーザー 一覧取得

```
curl --header "Private-Token: ***********" "https://gitlab.com/api/v4/users" | jq .
```
これだと公開されているユーザー全部取得できてしまうようなので、自分のusernameから取得する場合は、


### usernameからユーザー情報取得
```

$ curl --header "Private-Token: ********" "https://gitlab.com/api/v4/users?username=hogehogesan" | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   227  100   227    0     0    335      0 --:--:-- --:--:-- --:--:--   334
[
  {
    "id": 296*****,
    "name": "********",
    "username": "*******",
    "state": "active",
    "avatar_url": "https://secure.gravatar.com/avatar/2b4b64496c301cc124de57d74a228e38?s=80&d=identicon",
    "web_url": "https://gitlab.com/hogehogesan":q
  }
]

```

### 自分のプロジェクトを作成する

```
curl --header "PRIVATE-TOKEN: ***********" -X POST "https://gitlab.com/api/v4/projects?name=hogeproject&visibility=private"
```

#### jsonフォーマットで指定したい場合

```
curl -X POST -H "Content-Type: application/json" -d '{"name":"hogeproject", "visibility":"private"}' --header "Private-Token: **********" "https://gitlab.com/api/v4/projects" 

``` 

## グループ（チーム）での扱い


### 指定グループのプロジェクト一覧取得

```
curl --header "Private-Token: ***********" "https://gitlab.com/api/v4/groups/hogeteamproject/projects?visibility=private"  | jq .
```

# アクセスできるグループの情報取得

```
$ curl --header "Private-Token: **********" "https://gitlab.com/api/v4/groups" | jq .
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   386  100   386    0     0    555      0 --:--:-- --:--:-- --:--:--   555
[
  {
    "id": 3784278,
    "web_url": "https://gitlab.com/groups/******",
    "name": "*******",
    "path": "*******",
    "description": "*******",
    "visibility": "private",
    "lfs_enabled": true,
    "avatar_url": null,
    "request_access_enabled": false,
    "full_name": "*******",
    "full_path": "*******",
    "parent_id": null,
    "ldap_cn": null,
    "ldap_access": null
  }
]
```


### 指定のグループ内にプロジェクトを作成する

```
curl --header "PRIVATE-TOKEN: ***********" -X POST "https://gitlab.com/api/v4/projects?name=groupproject&visibility=private&namespace_id=3784278"
```

``` &namespace_id=3784278 ```は、
グループのIDを指定。。。この指定方法探すのに一苦労しました。

このidは、グループ内のプロジェクト一覧を取得した際に表示されるidを使います。



### （危険扱い注意！)指定のグループ内のプロジェクトを削除

```
curl --header "PRIVATE-TOKEN: ***********" -X DELETE "https://gitlab.com/api/v4/projects/8828971?namespace_id=3784278"
```

``` 8828971 ```は指定のプロジェクトID。サクッと消えるので注意！


## TIPS

### ユーザー指定なのか、グループ指定なのか

グループだと
〜/groups/fugafugateam〜

ユーザーだと
〜/users/hogehogekun〜

### gitlabはリポジトリ＝プロジェクト

なので、backlogで１プロジェクトに複数リポジトリを作っている場合は、
gitlab上で、プロジェクト分けて作るのか、グループで分けるのか、など工夫する必要がある。

### プロジェクトのユーザーに追加しないとプロジェクトの操作できないので、このAPI使う

https://developer.nulab-inc.com/ja/docs/backlog/api/2/add-project-user/



## 参考にさせて頂いたgitlab APIのリファレンス

### プロジェクトAPI
https://docs.gitlab.com/ce/api/projects.html#list-user-projects

### グループAPI
https://docs.gitlab.com/ee/api/groups.html