harbor
  • Introduction
  • 安装
  • API
  • harbor数据库
  • 镜像与源码项目
  • UI
    • user
      • GET_/users
    • Router
    • Controller-API
      • user
      • project
      • member
      • repository
      • base.go
  • JobService
  • secretkey
  • 日志
Powered by GitBook
On this page
  • user
  • project
  • project-member
  • repository
  • target
  • policy
  • job

Was this helpful?

  1. UI

Router

ui项目的简化结构如下

ui
├── main.go
├── router.go
└── ...

在router.go中,URL的路由代码如下(只列出了REST-API部分的路由):

func initRouter() {
    ...
    //API:
    beego.Router("/api/search", &api.SearchAPI{})
    beego.Router("/api/projects/:pid([0-9]+)/members/?:mid", &api.ProjectMemberAPI{})
    beego.Router("/api/projects/", &api.ProjectAPI{}, "get:List;post:Post")
    beego.Router("/api/projects/:id", &api.ProjectAPI{})
    beego.Router("/api/projects/:id/publicity", &api.ProjectAPI{}, "put:ToggleProjectPublic")
    beego.Router("/api/statistics", &api.StatisticAPI{})
    beego.Router("/api/projects/:id([0-9]+)/logs/filter", &api.ProjectAPI{}, "post:FilterAccessLog")
    beego.Router("/api/users/?:id", &api.UserAPI{})
    beego.Router("/api/users/:id([0-9]+)/password", &api.UserAPI{}, "put:ChangePassword")
    beego.Router("/api/users/:id/sysadmin", &api.UserAPI{}, "put:ToggleUserAdminRole")
    beego.Router("/api/internal/syncregistry", &api.InternalAPI{}, "post:SyncRegistry")
    beego.Router("/api/repositories", &api.RepositoryAPI{})
    beego.Router("/api/repositories/tags", &api.RepositoryAPI{}, "get:GetTags")
    beego.Router("/api/repositories/manifests", &api.RepositoryAPI{}, "get:GetManifests")
    beego.Router("/api/jobs/replication/", &api.RepJobAPI{}, "get:List")
    beego.Router("/api/jobs/replication/:id([0-9]+)", &api.RepJobAPI{})
    beego.Router("/api/jobs/replication/:id([0-9]+)/log", &api.RepJobAPI{}, "get:GetLog")
    beego.Router("/api/policies/replication/:id([0-9]+)", &api.RepPolicyAPI{})
    beego.Router("/api/policies/replication", &api.RepPolicyAPI{}, "get:List")
    beego.Router("/api/policies/replication", &api.RepPolicyAPI{}, "post:Post")
    beego.Router("/api/policies/replication/:id([0-9]+)/enablement", &api.RepPolicyAPI{}, "put:UpdateEnablement")
    beego.Router("/api/targets/", &api.TargetAPI{}, "get:List")
    beego.Router("/api/targets/", &api.TargetAPI{}, "post:Post")
    beego.Router("/api/targets/:id([0-9]+)", &api.TargetAPI{})
    beego.Router("/api/targets/:id([0-9]+)/policies/", &api.TargetAPI{}, "get:ListPolicies")
    beego.Router("/api/targets/ping", &api.TargetAPI{}, "post:Ping")
    beego.Router("/api/repositories/top", &api.RepositoryAPI{}, "get:GetTopRepos")
    beego.Router("/api/logs", &api.LogAPI{})
    ...
}

user

关于user的API有如下几个:

GET        /users
POST       /users
GET        /users/current
PUT        /users/{user_id}
DELETE     /users/{user_id}
PUT        /users/{user_id}/password
PUT        /users/{user_id}/sysadmin

以上七个API匹配以下三行代码中的路由:

beego.Router("/api/users/?:id", &api.UserAPI{})
beego.Router("/api/users/:id([0-9]+)/password", &api.UserAPI{}, "put:ChangePassword")
beego.Router("/api/users/:id/sysadmin", &api.UserAPI{}, "put:ToggleUserAdminRole")

project

project涉及到的API有

GET        /projects
HEAD       /projects
POST       /projects
GET        /projects/{project_id}
DELETE     /projects/{project_id}
PUT        /projects/{project_id}/publicity
POST       /projects/{project_id}/logs/filter

对应的路由匹配代码为:

beego.Router("/api/projects/", &api.ProjectAPI{}, "get:List;post:Post")
beego.Router("/api/projects/:id", &api.ProjectAPI{})
beego.Router("/api/projects/:id/publicity", &api.ProjectAPI{}, "put:ToggleProjectPublic")
beego.Router("/api/projects/:id([0-9]+)/logs/filter", &api.ProjectAPI{}, "post:FilterAccessLog")

project-member

project-member的API有:

GET        /projects/{project_id}/members
POST       /projects/{project_id}/members
GET        /projects/{project_id}/members/{user_id}
PUT        /projects/{project_id}/members/{user_id}
DELETE     /projects/{project_id}/members/{user_id}

对应的路由匹配规则为:

beego.Router("/api/projects/:pid([0-9]+)/members/?:mid", &api.ProjectMemberAPI{})

repository

repository的API有:

GET        /repositories
DELETE     /repositories
GET        /repositories/tags
GET        /repositories/manifests
GET        /repositories/top

对应的路由规划为:

beego.Router("/api/repositories", &api.RepositoryAPI{})
beego.Router("/api/repositories/tags", &api.RepositoryAPI{}, "get:GetTags")
beego.Router("/api/repositories/manifests", &api.RepositoryAPI{}, "get:GetManifests")
beego.Router("/api/repositories/top", &api.RepositoryAPI{}, "get:GetTopRepos")

target

(走完user、project、project-member、repository的流程再开始)

policy

(走完user、project、project-member、repository的流程再开始)

job

(走完user、project、project-member、repository的流程再开始)

T1 :总结上面涉及到的路由(路径参数、请求方法的处理函数等)(先画出harbor中的实体对象)

PreviousGET_/usersNextController-API

Last updated 4 years ago

Was this helpful?