// ⚡️ Fiber is an Express inspired web framework written in Go with ☕️ // 🤖 Github Repository: https://github.com/gofiber/fiber // 📌 API Documentation: https://docs.gofiber.io package fiber // go test -v ./... -run=^$ -bench=Benchmark_Router -benchmem -count=3 import ( "testing" ) var routerBenchApp *App func init() { routerBenchApp = New() h := func(c *Ctx) {} for _, r := range githubAPI { switch r.method { case "GET": routerBenchApp.Get(r.path, h) case "POST": routerBenchApp.Post(r.path, h) case "PUT": routerBenchApp.Put(r.path, h) case "PATCH": routerBenchApp.Patch(r.path, h) case "DELETE": routerBenchApp.Delete(r.path, h) default: panic("Unknow HTTP method: " + r.method) } } for i := 0; i < 100; i++ { routerBenchApp.Use("/middleware", func(c *Ctx) { c.Next() }) } } // go test -v ./... -run=^$ -bench=Benchmark_Router_Next_Stack -benchmem -count=3 func Benchmark_Router_Next_Stack(b *testing.B) { for n := 0; n < b.N; n++ { _, _ = matchRoute("GET", "/middleware") } } func Benchmark_Router_Github_API(b *testing.B) { for n := 0; n < b.N; n++ { for i := range testRoutes { _, _ = matchRoute(testRoutes[i].method, testRoutes[i].path) } } } func Benchmark_Router_Stacked_Route(b *testing.B) { for n := 0; n < b.N; n++ { _, _ = matchRoute("GET", "/orgs/gofiber/public_members/fenny") } } func Benchmark_Router_Last_Route(b *testing.B) { for n := 0; n < b.N; n++ { _, _ = matchRoute("DELETE", "/user/keys/1337") } } func Benchmark_Router_Middle_Route(b *testing.B) { for n := 0; n < b.N; n++ { _, _ = matchRoute("GET", "/orgs/gofiber/public_members/fenny") } } func Benchmark_Router_First_Route(b *testing.B) { for n := 0; n < b.N; n++ { _, _ = matchRoute("GET", "/authorizations") } } func matchRoute(method, path string) (match bool, values []string) { mINT := methodINT[method] for i := range routerBenchApp.routes[mINT] { _, _ = routerBenchApp.routes[mINT][i].matchRoute(path) } return } type testRoute struct { method string path string } var testRoutes = []testRoute{ // OAuth Authorizations {"GET", "/authorizations"}, {"GET", "/authorizations/1337"}, {"POST", "/authorizations"}, {"PUT", "/authorizations/clients/inf1nd873nf8912g9t"}, {"PATCH", "/authorizations/1337"}, {"DELETE", "/authorizations/1337"}, {"GET", "/applications/2nds981mng6azl127y/tokens/sn108hbe1geheibf13f"}, {"DELETE", "/applications/2nds981mng6azl127y/tokens"}, {"DELETE", "/applications/2nds981mng6azl127y/tokens/sn108hbe1geheibf13f"}, // Activity {"GET", "/events"}, {"GET", "/repos/fenny/fiber/events"}, {"GET", "/networks/fenny/fiber/events"}, {"GET", "/orgs/gofiber/events"}, {"GET", "/users/fenny/received_events"}, {"GET", "/users/fenny/received_events/public"}, {"GET", "/users/fenny/events"}, {"GET", "/users/fenny/events/public"}, {"GET", "/users/fenny/events/orgs/gofiber"}, {"GET", "/feeds"}, {"GET", "/notifications"}, {"GET", "/repos/fenny/fiber/notifications"}, {"PUT", "/notifications"}, {"PUT", "/repos/fenny/fiber/notifications"}, {"GET", "/notifications/threads/1337"}, {"PATCH", "/notifications/threads/1337"}, {"GET", "/notifications/threads/1337/subscription"}, {"PUT", "/notifications/threads/1337/subscription"}, {"DELETE", "/notifications/threads/1337/subscription"}, {"GET", "/repos/fenny/fiber/stargazers"}, {"GET", "/users/fenny/starred"}, {"GET", "/user/starred"}, {"GET", "/user/starred/fenny/fiber"}, {"PUT", "/user/starred/fenny/fiber"}, {"DELETE", "/user/starred/fenny/fiber"}, {"GET", "/repos/fenny/fiber/subscribers"}, {"GET", "/users/fenny/subscriptions"}, {"GET", "/user/subscriptions"}, {"GET", "/repos/fenny/fiber/subscription"}, {"PUT", "/repos/fenny/fiber/subscription"}, {"DELETE", "/repos/fenny/fiber/subscription"}, {"GET", "/user/subscriptions/fenny/fiber"}, {"PUT", "/user/subscriptions/fenny/fiber"}, {"DELETE", "/user/subscriptions/fenny/fiber"}, // Gists {"GET", "/users/fenny/gists"}, {"GET", "/gists"}, {"GET", "/gists/public"}, {"GET", "/gists/starred"}, {"GET", "/gists/1337"}, {"POST", "/gists"}, {"PATCH", "/gists/1337"}, {"PUT", "/gists/1337/star"}, {"DELETE", "/gists/1337/star"}, {"GET", "/gists/1337/star"}, {"POST", "/gists/1337/forks"}, {"DELETE", "/gists/1337"}, // Git Data {"GET", "/repos/fenny/fiber/git/blobs/v948b24g98ubngw9082bn02giub"}, {"POST", "/repos/fenny/fiber/git/blobs"}, {"GET", "/repos/fenny/fiber/git/commits/v948b24g98ubngw9082bn02giub"}, {"POST", "/repos/fenny/fiber/git/commits"}, {"GET", "/repos/fenny/fiber/git/refs/im/a/wildcard"}, {"GET", "/repos/fenny/fiber/git/refs"}, {"POST", "/repos/fenny/fiber/git/refs"}, {"PATCH", "/repos/fenny/fiber/git/refs/im/a/wildcard"}, {"DELETE", "/repos/fenny/fiber/git/refs/im/a/wildcard"}, {"GET", "/repos/fenny/fiber/git/tags/v948b24g98ubngw9082bn02giub"}, {"POST", "/repos/fenny/fiber/git/tags"}, {"GET", "/repos/fenny/fiber/git/trees/v948b24g98ubngw9082bn02giub"}, {"POST", "/repos/fenny/fiber/git/trees"}, // Issues {"GET", "/issues"}, {"GET", "/user/issues"}, {"GET", "/orgs/gofiber/issues"}, {"GET", "/repos/fenny/fiber/issues"}, {"GET", "/repos/fenny/fiber/issues/1000"}, {"POST", "/repos/fenny/fiber/issues"}, {"PATCH", "/repos/fenny/fiber/issues/1000"}, {"GET", "/repos/fenny/fiber/assignees"}, {"GET", "/repos/fenny/fiber/assignees/nic"}, {"GET", "/repos/fenny/fiber/issues/1000/comments"}, {"GET", "/repos/fenny/fiber/issues/comments"}, {"GET", "/repos/fenny/fiber/issues/comments/1337"}, {"POST", "/repos/fenny/fiber/issues/1000/comments"}, {"PATCH", "/repos/fenny/fiber/issues/comments/1337"}, {"DELETE", "/repos/fenny/fiber/issues/comments/1337"}, {"GET", "/repos/fenny/fiber/issues/1000/events"}, {"GET", "/repos/fenny/fiber/issues/events"}, {"GET", "/repos/fenny/fiber/issues/events/1337"}, {"GET", "/repos/fenny/fiber/labels"}, {"GET", "/repos/fenny/fiber/labels/john"}, {"POST", "/repos/fenny/fiber/labels"}, {"PATCH", "/repos/fenny/fiber/labels/john"}, {"DELETE", "/repos/fenny/fiber/labels/john"}, {"GET", "/repos/fenny/fiber/issues/1000/labels"}, {"POST", "/repos/fenny/fiber/issues/1000/labels"}, {"DELETE", "/repos/fenny/fiber/issues/1000/labels/john"}, {"PUT", "/repos/fenny/fiber/issues/1000/labels"}, {"DELETE", "/repos/fenny/fiber/issues/1000/labels"}, {"GET", "/repos/fenny/fiber/milestones/1000/labels"}, {"GET", "/repos/fenny/fiber/milestones"}, {"GET", "/repos/fenny/fiber/milestones/1000"}, {"POST", "/repos/fenny/fiber/milestones"}, {"PATCH", "/repos/fenny/fiber/milestones/1000"}, {"DELETE", "/repos/fenny/fiber/milestones/1000"}, // Miscellaneous {"GET", "/emojis"}, {"GET", "/gitignore/templates"}, {"GET", "/gitignore/templates/john"}, {"POST", "/markdown"}, {"POST", "/markdown/raw"}, {"GET", "/meta"}, {"GET", "/rate_limit"}, // Organizations {"GET", "/users/fenny/orgs"}, {"GET", "/user/orgs"}, {"GET", "/orgs/gofiber"}, {"PATCH", "/orgs/gofiber"}, {"GET", "/orgs/gofiber/members"}, {"GET", "/orgs/gofiber/members/fenny"}, {"DELETE", "/orgs/gofiber/members/fenny"}, {"GET", "/orgs/gofiber/public_members"}, {"GET", "/orgs/gofiber/public_members/fenny"}, {"PUT", "/orgs/gofiber/public_members/fenny"}, {"DELETE", "/orgs/gofiber/public_members/fenny"}, {"GET", "/orgs/gofiber/teams"}, {"GET", "/teams/1337"}, {"POST", "/orgs/gofiber/teams"}, {"PATCH", "/teams/1337"}, {"DELETE", "/teams/1337"}, {"GET", "/teams/1337/members"}, {"GET", "/teams/1337/members/fenny"}, {"PUT", "/teams/1337/members/fenny"}, {"DELETE", "/teams/1337/members/fenny"}, {"GET", "/teams/1337/repos"}, {"GET", "/teams/1337/repos/fenny/fiber"}, {"PUT", "/teams/1337/repos/fenny/fiber"}, {"DELETE", "/teams/1337/repos/fenny/fiber"}, {"GET", "/user/teams"}, // Pull Requests {"GET", "/repos/fenny/fiber/pulls"}, {"GET", "/repos/fenny/fiber/pulls/1000"}, {"POST", "/repos/fenny/fiber/pulls"}, {"PATCH", "/repos/fenny/fiber/pulls/1000"}, {"GET", "/repos/fenny/fiber/pulls/1000/commits"}, {"GET", "/repos/fenny/fiber/pulls/1000/files"}, {"GET", "/repos/fenny/fiber/pulls/1000/merge"}, {"PUT", "/repos/fenny/fiber/pulls/1000/merge"}, {"GET", "/repos/fenny/fiber/pulls/1000/comments"}, {"GET", "/repos/fenny/fiber/pulls/comments"}, {"GET", "/repos/fenny/fiber/pulls/comments/1000"}, {"PUT", "/repos/fenny/fiber/pulls/1000/comments"}, {"PATCH", "/repos/fenny/fiber/pulls/comments/1000"}, {"DELETE", "/repos/fenny/fiber/pulls/comments/1000"}, // Repositories {"GET", "/user/repos"}, {"GET", "/users/fenny/repos"}, {"GET", "/orgs/gofiber/repos"}, {"GET", "/repositories"}, {"POST", "/user/repos"}, {"POST", "/orgs/gofiber/repos"}, {"GET", "/repos/fenny/fiber"}, {"PATCH", "/repos/fenny/fiber"}, {"GET", "/repos/fenny/fiber/contributors"}, {"GET", "/repos/fenny/fiber/languages"}, {"GET", "/repos/fenny/fiber/teams"}, {"GET", "/repos/fenny/fiber/tags"}, {"GET", "/repos/fenny/fiber/branches"}, {"GET", "/repos/fenny/fiber/branches/master"}, {"DELETE", "/repos/fenny/fiber"}, {"GET", "/repos/fenny/fiber/collaborators"}, {"GET", "/repos/fenny/fiber/collaborators/fenny"}, {"PUT", "/repos/fenny/fiber/collaborators/fenny"}, {"DELETE", "/repos/fenny/fiber/collaborators/fenny"}, {"GET", "/repos/fenny/fiber/comments"}, {"GET", "/repos/fenny/fiber/commits/v948b24g98ubngw9082bn02giub/comments"}, {"POST", "/repos/fenny/fiber/commits/v948b24g98ubngw9082bn02giub/comments"}, {"GET", "/repos/fenny/fiber/comments/1337"}, {"PATCH", "/repos/fenny/fiber/comments/1337"}, {"DELETE", "/repos/fenny/fiber/comments/1337"}, {"GET", "/repos/fenny/fiber/commits"}, {"GET", "/repos/fenny/fiber/commits/v948b24g98ubngw9082bn02giub"}, {"GET", "/repos/fenny/fiber/readme"}, {"GET", "/repos/fenny/fiber/contents/im/a/wildcard"}, {"PUT", "/repos/fenny/fiber/contents/im/a/wildcard"}, {"DELETE", "/repos/fenny/fiber/contents/im/a/wildcard"}, {"GET", "/repos/fenny/fiber/gzip/google"}, {"GET", "/repos/fenny/fiber/keys"}, {"GET", "/repos/fenny/fiber/keys/1337"}, {"POST", "/repos/fenny/fiber/keys"}, {"PATCH", "/repos/fenny/fiber/keys/1337"}, {"DELETE", "/repos/fenny/fiber/keys/1337"}, {"GET", "/repos/fenny/fiber/downloads"}, {"GET", "/repos/fenny/fiber/downloads/1337"}, {"DELETE", "/repos/fenny/fiber/downloads/1337"}, {"GET", "/repos/fenny/fiber/forks"}, {"POST", "/repos/fenny/fiber/forks"}, {"GET", "/repos/fenny/fiber/hooks"}, {"GET", "/repos/fenny/fiber/hooks/1337"}, {"POST", "/repos/fenny/fiber/hooks"}, {"PATCH", "/repos/fenny/fiber/hooks/1337"}, {"POST", "/repos/fenny/fiber/hooks/1337/tests"}, {"DELETE", "/repos/fenny/fiber/hooks/1337"}, {"POST", "/repos/fenny/fiber/merges"}, {"GET", "/repos/fenny/fiber/releases"}, {"GET", "/repos/fenny/fiber/releases/1337"}, {"POST", "/repos/fenny/fiber/releases"}, {"PATCH", "/repos/fenny/fiber/releases/1337"}, {"DELETE", "/repos/fenny/fiber/releases/1337"}, {"GET", "/repos/fenny/fiber/releases/1337/assets"}, {"GET", "/repos/fenny/fiber/stats/contributors"}, {"GET", "/repos/fenny/fiber/stats/commit_activity"}, {"GET", "/repos/fenny/fiber/stats/code_frequency"}, {"GET", "/repos/fenny/fiber/stats/participation"}, {"GET", "/repos/fenny/fiber/stats/punch_card"}, {"GET", "/repos/fenny/fiber/statuses/google"}, {"POST", "/repos/fenny/fiber/statuses/google"}, // Search {"GET", "/search/repositories"}, {"GET", "/search/code"}, {"GET", "/search/issues"}, {"GET", "/search/users"}, {"GET", "/legacy/issues/search/fenny/fibersitory/locked/finish"}, {"GET", "/legacy/repos/search/finish"}, {"GET", "/legacy/user/search/finish"}, {"GET", "/legacy/user/email/info@gofiber.io"}, // Users {"GET", "/users/fenny"}, {"GET", "/user"}, {"PATCH", "/user"}, {"GET", "/users"}, {"GET", "/user/emails"}, {"POST", "/user/emails"}, {"DELETE", "/user/emails"}, {"GET", "/users/fenny/followers"}, {"GET", "/user/followers"}, {"GET", "/users/fenny/following"}, {"GET", "/user/following"}, {"GET", "/user/following/fenny"}, {"GET", "/users/fenny/following/renan"}, {"PUT", "/user/following/fenny"}, {"DELETE", "/user/following/fenny"}, {"GET", "/users/fenny/keys"}, {"GET", "/user/keys"}, {"GET", "/user/keys/1337"}, {"POST", "/user/keys"}, {"PATCH", "/user/keys/1337"}, {"DELETE", "/user/keys/1337"}, } var githubAPI = []testRoute{ // OAuth Authorizations {"GET", "/authorizations"}, {"GET", "/authorizations/:id"}, {"POST", "/authorizations"}, {"PUT", "/authorizations/clients/:client_id"}, {"PATCH", "/authorizations/:id"}, {"DELETE", "/authorizations/:id"}, {"GET", "/applications/:client_id/tokens/:access_token"}, {"DELETE", "/applications/:client_id/tokens"}, {"DELETE", "/applications/:client_id/tokens/:access_token"}, // Activity {"GET", "/events"}, {"GET", "/repos/:owner/:repo/events"}, {"GET", "/networks/:owner/:repo/events"}, {"GET", "/orgs/:org/events"}, {"GET", "/users/:user/received_events"}, {"GET", "/users/:user/received_events/public"}, {"GET", "/users/:user/events"}, {"GET", "/users/:user/events/public"}, {"GET", "/users/:user/events/orgs/:org"}, {"GET", "/feeds"}, {"GET", "/notifications"}, {"GET", "/repos/:owner/:repo/notifications"}, {"PUT", "/notifications"}, {"PUT", "/repos/:owner/:repo/notifications"}, {"GET", "/notifications/threads/:id"}, {"PATCH", "/notifications/threads/:id"}, {"GET", "/notifications/threads/:id/subscription"}, {"PUT", "/notifications/threads/:id/subscription"}, {"DELETE", "/notifications/threads/:id/subscription"}, {"GET", "/repos/:owner/:repo/stargazers"}, {"GET", "/users/:user/starred"}, {"GET", "/user/starred"}, {"GET", "/user/starred/:owner/:repo"}, {"PUT", "/user/starred/:owner/:repo"}, {"DELETE", "/user/starred/:owner/:repo"}, {"GET", "/repos/:owner/:repo/subscribers"}, {"GET", "/users/:user/subscriptions"}, {"GET", "/user/subscriptions"}, {"GET", "/repos/:owner/:repo/subscription"}, {"PUT", "/repos/:owner/:repo/subscription"}, {"DELETE", "/repos/:owner/:repo/subscription"}, {"GET", "/user/subscriptions/:owner/:repo"}, {"PUT", "/user/subscriptions/:owner/:repo"}, {"DELETE", "/user/subscriptions/:owner/:repo"}, // Gists {"GET", "/users/:user/gists"}, {"GET", "/gists"}, {"GET", "/gists/public"}, {"GET", "/gists/starred"}, {"GET", "/gists/:id"}, {"POST", "/gists"}, {"PATCH", "/gists/:id"}, {"PUT", "/gists/:id/star"}, {"DELETE", "/gists/:id/star"}, {"GET", "/gists/:id/star"}, {"POST", "/gists/:id/forks"}, {"DELETE", "/gists/:id"}, // Git Data {"GET", "/repos/:owner/:repo/git/blobs/:sha"}, {"POST", "/repos/:owner/:repo/git/blobs"}, {"GET", "/repos/:owner/:repo/git/commits/:sha"}, {"POST", "/repos/:owner/:repo/git/commits"}, {"GET", "/repos/:owner/:repo/git/refs/*"}, {"GET", "/repos/:owner/:repo/git/refs"}, {"POST", "/repos/:owner/:repo/git/refs"}, {"PATCH", "/repos/:owner/:repo/git/refs/*"}, {"DELETE", "/repos/:owner/:repo/git/refs/*"}, {"GET", "/repos/:owner/:repo/git/tags/:sha"}, {"POST", "/repos/:owner/:repo/git/tags"}, {"GET", "/repos/:owner/:repo/git/trees/:sha"}, {"POST", "/repos/:owner/:repo/git/trees"}, // Issues {"GET", "/issues"}, {"GET", "/user/issues"}, {"GET", "/orgs/:org/issues"}, {"GET", "/repos/:owner/:repo/issues"}, {"GET", "/repos/:owner/:repo/issues/:number"}, {"POST", "/repos/:owner/:repo/issues"}, {"PATCH", "/repos/:owner/:repo/issues/:number"}, {"GET", "/repos/:owner/:repo/assignees"}, {"GET", "/repos/:owner/:repo/assignees/:assignee"}, {"GET", "/repos/:owner/:repo/issues/:number/comments"}, {"GET", "/repos/:owner/:repo/issues/comments"}, {"GET", "/repos/:owner/:repo/issues/comments/:id"}, {"POST", "/repos/:owner/:repo/issues/:number/comments"}, {"PATCH", "/repos/:owner/:repo/issues/comments/:id"}, {"DELETE", "/repos/:owner/:repo/issues/comments/:id"}, {"GET", "/repos/:owner/:repo/issues/:number/events"}, {"GET", "/repos/:owner/:repo/issues/events"}, {"GET", "/repos/:owner/:repo/issues/events/:id"}, {"GET", "/repos/:owner/:repo/labels"}, {"GET", "/repos/:owner/:repo/labels/:name"}, {"POST", "/repos/:owner/:repo/labels"}, {"PATCH", "/repos/:owner/:repo/labels/:name"}, {"DELETE", "/repos/:owner/:repo/labels/:name"}, {"GET", "/repos/:owner/:repo/issues/:number/labels"}, {"POST", "/repos/:owner/:repo/issues/:number/labels"}, {"DELETE", "/repos/:owner/:repo/issues/:number/labels/:name"}, {"PUT", "/repos/:owner/:repo/issues/:number/labels"}, {"DELETE", "/repos/:owner/:repo/issues/:number/labels"}, {"GET", "/repos/:owner/:repo/milestones/:number/labels"}, {"GET", "/repos/:owner/:repo/milestones"}, {"GET", "/repos/:owner/:repo/milestones/:number"}, {"POST", "/repos/:owner/:repo/milestones"}, {"PATCH", "/repos/:owner/:repo/milestones/:number"}, {"DELETE", "/repos/:owner/:repo/milestones/:number"}, // Miscellaneous {"GET", "/emojis"}, {"GET", "/gitignore/templates"}, {"GET", "/gitignore/templates/:name"}, {"POST", "/markdown"}, {"POST", "/markdown/raw"}, {"GET", "/meta"}, {"GET", "/rate_limit"}, // Organizations {"GET", "/users/:user/orgs"}, {"GET", "/user/orgs"}, {"GET", "/orgs/:org"}, {"PATCH", "/orgs/:org"}, {"GET", "/orgs/:org/members"}, {"GET", "/orgs/:org/members/:user"}, {"DELETE", "/orgs/:org/members/:user"}, {"GET", "/orgs/:org/public_members"}, {"GET", "/orgs/:org/public_members/:user"}, {"PUT", "/orgs/:org/public_members/:user"}, {"DELETE", "/orgs/:org/public_members/:user"}, {"GET", "/orgs/:org/teams"}, {"GET", "/teams/:id"}, {"POST", "/orgs/:org/teams"}, {"PATCH", "/teams/:id"}, {"DELETE", "/teams/:id"}, {"GET", "/teams/:id/members"}, {"GET", "/teams/:id/members/:user"}, {"PUT", "/teams/:id/members/:user"}, {"DELETE", "/teams/:id/members/:user"}, {"GET", "/teams/:id/repos"}, {"GET", "/teams/:id/repos/:owner/:repo"}, {"PUT", "/teams/:id/repos/:owner/:repo"}, {"DELETE", "/teams/:id/repos/:owner/:repo"}, {"GET", "/user/teams"}, // Pull Requests {"GET", "/repos/:owner/:repo/pulls"}, {"GET", "/repos/:owner/:repo/pulls/:number"}, {"POST", "/repos/:owner/:repo/pulls"}, {"PATCH", "/repos/:owner/:repo/pulls/:number"}, {"GET", "/repos/:owner/:repo/pulls/:number/commits"}, {"GET", "/repos/:owner/:repo/pulls/:number/files"}, {"GET", "/repos/:owner/:repo/pulls/:number/merge"}, {"PUT", "/repos/:owner/:repo/pulls/:number/merge"}, {"GET", "/repos/:owner/:repo/pulls/:number/comments"}, {"GET", "/repos/:owner/:repo/pulls/comments"}, {"GET", "/repos/:owner/:repo/pulls/comments/:number"}, {"PUT", "/repos/:owner/:repo/pulls/:number/comments"}, {"PATCH", "/repos/:owner/:repo/pulls/comments/:number"}, {"DELETE", "/repos/:owner/:repo/pulls/comments/:number"}, // Repositories {"GET", "/user/repos"}, {"GET", "/users/:user/repos"}, {"GET", "/orgs/:org/repos"}, {"GET", "/repositories"}, {"POST", "/user/repos"}, {"POST", "/orgs/:org/repos"}, {"GET", "/repos/:owner/:repo"}, {"PATCH", "/repos/:owner/:repo"}, {"GET", "/repos/:owner/:repo/contributors"}, {"GET", "/repos/:owner/:repo/languages"}, {"GET", "/repos/:owner/:repo/teams"}, {"GET", "/repos/:owner/:repo/tags"}, {"GET", "/repos/:owner/:repo/branches"}, {"GET", "/repos/:owner/:repo/branches/:branch"}, {"DELETE", "/repos/:owner/:repo"}, {"GET", "/repos/:owner/:repo/collaborators"}, {"GET", "/repos/:owner/:repo/collaborators/:user"}, {"PUT", "/repos/:owner/:repo/collaborators/:user"}, {"DELETE", "/repos/:owner/:repo/collaborators/:user"}, {"GET", "/repos/:owner/:repo/comments"}, {"GET", "/repos/:owner/:repo/commits/:sha/comments"}, {"POST", "/repos/:owner/:repo/commits/:sha/comments"}, {"GET", "/repos/:owner/:repo/comments/:id"}, {"PATCH", "/repos/:owner/:repo/comments/:id"}, {"DELETE", "/repos/:owner/:repo/comments/:id"}, {"GET", "/repos/:owner/:repo/commits"}, {"GET", "/repos/:owner/:repo/commits/:sha"}, {"GET", "/repos/:owner/:repo/readme"}, {"GET", "/repos/:owner/:repo/contents/*"}, {"PUT", "/repos/:owner/:repo/contents/*"}, {"DELETE", "/repos/:owner/:repo/contents/*"}, {"GET", "/repos/:owner/:repo/:archive_format/:ref"}, {"GET", "/repos/:owner/:repo/keys"}, {"GET", "/repos/:owner/:repo/keys/:id"}, {"POST", "/repos/:owner/:repo/keys"}, {"PATCH", "/repos/:owner/:repo/keys/:id"}, {"DELETE", "/repos/:owner/:repo/keys/:id"}, {"GET", "/repos/:owner/:repo/downloads"}, {"GET", "/repos/:owner/:repo/downloads/:id"}, {"DELETE", "/repos/:owner/:repo/downloads/:id"}, {"GET", "/repos/:owner/:repo/forks"}, {"POST", "/repos/:owner/:repo/forks"}, {"GET", "/repos/:owner/:repo/hooks"}, {"GET", "/repos/:owner/:repo/hooks/:id"}, {"POST", "/repos/:owner/:repo/hooks"}, {"PATCH", "/repos/:owner/:repo/hooks/:id"}, {"POST", "/repos/:owner/:repo/hooks/:id/tests"}, {"DELETE", "/repos/:owner/:repo/hooks/:id"}, {"POST", "/repos/:owner/:repo/merges"}, {"GET", "/repos/:owner/:repo/releases"}, {"GET", "/repos/:owner/:repo/releases/:id"}, {"POST", "/repos/:owner/:repo/releases"}, {"PATCH", "/repos/:owner/:repo/releases/:id"}, {"DELETE", "/repos/:owner/:repo/releases/:id"}, {"GET", "/repos/:owner/:repo/releases/:id/assets"}, {"GET", "/repos/:owner/:repo/stats/contributors"}, {"GET", "/repos/:owner/:repo/stats/commit_activity"}, {"GET", "/repos/:owner/:repo/stats/code_frequency"}, {"GET", "/repos/:owner/:repo/stats/participation"}, {"GET", "/repos/:owner/:repo/stats/punch_card"}, {"GET", "/repos/:owner/:repo/statuses/:ref"}, {"POST", "/repos/:owner/:repo/statuses/:ref"}, // Search {"GET", "/search/repositories"}, {"GET", "/search/code"}, {"GET", "/search/issues"}, {"GET", "/search/users"}, {"GET", "/legacy/issues/search/:owner/:repository/:state/:keyword"}, {"GET", "/legacy/repos/search/:keyword"}, {"GET", "/legacy/user/search/:keyword"}, {"GET", "/legacy/user/email/:email"}, // Users {"GET", "/users/:user"}, {"GET", "/user"}, {"PATCH", "/user"}, {"GET", "/users"}, {"GET", "/user/emails"}, {"POST", "/user/emails"}, {"DELETE", "/user/emails"}, {"GET", "/users/:user/followers"}, {"GET", "/user/followers"}, {"GET", "/users/:user/following"}, {"GET", "/user/following"}, {"GET", "/user/following/:user"}, {"GET", "/users/:user/following/:target_user"}, {"PUT", "/user/following/:user"}, {"DELETE", "/user/following/:user"}, {"GET", "/users/:user/keys"}, {"GET", "/user/keys"}, {"GET", "/user/keys/:id"}, {"POST", "/user/keys"}, {"PATCH", "/user/keys/:id"}, {"DELETE", "/user/keys/:id"}, }