Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(543)

Unified Diff: appengine/ephelper/epfrontend/discovery.go

Issue 1750143003: Remove ephelper and other endpoints code. (Closed) Base URL: https://github.com/luci/luci-go@master
Patch Set: Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « appengine/ephelper/context.go ('k') | appengine/ephelper/epfrontend/discovery_test.go » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: appengine/ephelper/epfrontend/discovery.go
diff --git a/appengine/ephelper/epfrontend/discovery.go b/appengine/ephelper/epfrontend/discovery.go
deleted file mode 100644
index c6ed836d609bc731b32b05da2199b72075865942..0000000000000000000000000000000000000000
--- a/appengine/ephelper/epfrontend/discovery.go
+++ /dev/null
@@ -1,307 +0,0 @@
-// Copyright 2015 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-package epfrontend
-
-import (
- "fmt"
- "net/http"
- "net/url"
- "regexp"
- "sort"
- "strings"
-
- "github.com/GoogleCloudPlatform/go-endpoints/endpoints"
-)
-
-var (
- // Capture {stuff}.
- reParam = regexp.MustCompile(`\{([^\}]+)\}`)
-)
-
-func getHostURL(r *http.Request) *url.URL {
- u := url.URL{
- Scheme: "http",
- Host: r.Host,
- }
- if r.TLS != nil {
- u.Scheme = "https"
- }
- return &u
-}
-
-func (s *Server) handleDirectoryList(r *http.Request) (interface{}, error) {
- u := getHostURL(r)
- u.Path = r.URL.Path
- return s.directoryList(u), nil
-}
-
-// directoryList converts a list of backend APIs into an API directory.
-//
-// The conversion isn't perfect or spec-confirming. It makes a set of minimal
-// mutations to be compatible with the `google-api-go-generator` tool.
-//
-// Each directory item's DiscoveryLink is generated from the item's index.
-// For example, directory item #0 is hosted at "./apis/0/rest".
-func (s *Server) directoryList(root *url.URL) *directoryList {
- serviceNames := make([]string, 0, len(s.services))
- for k := range s.services {
- serviceNames = append(serviceNames, k)
- }
- sort.Strings(serviceNames)
-
- d := directoryList{
- Kind: "discovery#directoryList",
- DiscoveryVersion: "v1",
- Items: make([]*directoryItem, len(serviceNames)),
- }
-
- for i, name := range serviceNames {
- api := s.services[name]
- di := directoryItem{
- Kind: "discovery#directoryItem",
- ID: apiID(api),
- Name: api.Name,
- Version: api.Version,
- Description: api.Desc,
- DiscoveryRestURL: safeURLPathJoin(root.String(), api.Name, api.Version, "rest"),
- DiscoveryLink: safeURLPathJoin(".", "apis", api.Name, api.Version, "rest"),
- RootURL: root.String(),
- Preferred: false,
- }
- d.Items[i] = &di
- }
-
- return &d
-}
-
-func apiID(a *endpoints.APIDescriptor) string {
- return fmt.Sprintf("%s:%s", a.Name, a.Version)
-}
-
-func (s *Server) handleRestDescription(r *http.Request, a *endpoints.APIDescriptor) (interface{}, error) {
- u := getHostURL(r)
- u.Path = s.root
- d, err := buildRestDescription(u, a)
- return d, err
-}
-
-// buildRestDescription returns a single directory item's REST description
-// structure.
-//
-// This is a JSON-compatible element that describes the APIs exported by a
-// singleAPI.
-func buildRestDescription(root *url.URL, a *endpoints.APIDescriptor) (*restDescription, error) {
- servicePath := safeURLPathJoin(a.Name, a.Version)
- rdesc := restDescription{
- Kind: "discovery#restDescription",
- DiscoveryVersion: "v1",
-
- Protocol: "rest",
- ID: apiID(a),
- Name: a.Name,
- Version: a.Version,
- Description: a.Desc,
- RootURL: root.String(),
- BasePath: safeURLPathJoin("", root.Path, servicePath, ""),
- BaseURL: safeURLPathJoin(root.String(), servicePath, ""),
- ServicePath: safeURLPathJoin(servicePath, ""),
- DefaultVersion: a.Default,
- }
- if len(a.Descriptor.Schemas) > 0 {
- rdesc.Schemas = make(map[string]*endpoints.APISchemaDescriptor, len(a.Descriptor.Schemas))
- }
- if len(a.Methods) > 0 {
- rdesc.Methods = make(map[string]*restMethod, len(a.Methods))
- }
-
- for name, schema := range a.Descriptor.Schemas {
- schema := *schema
- rdesc.Schemas[name] = &schema
- }
-
- for id, desc := range a.Methods {
- m := restMethod{
- ID: id,
- Path: desc.Path,
- HTTPMethod: desc.HTTPMethod,
- Scopes: desc.Scopes,
- Description: desc.Desc,
- }
- m.ParameterOrder = parseParameterOrderFromPath(m.Path)
- if nParams := len(desc.Request.Params) + len(desc.Response.Params); nParams > 0 {
- m.Parameters = make(map[string]*restMethodParameter, nParams)
- }
-
- err := error(nil)
- rosyMethod := a.Descriptor.Methods[desc.RosyMethod]
- if rosyMethod == nil {
- return nil, fmt.Errorf("no descriptor for RosyMethod %q", desc.RosyMethod)
- }
- m.Request, err = m.buildMethodParamRef(&desc.Request, rosyMethod.Request, true)
- if err != nil {
- return nil, fmt.Errorf("failed to build method [%s] request: %s", m.ID, err)
- }
-
- m.Response, err = m.buildMethodParamRef(&desc.Response, rosyMethod.Response, false)
- if err != nil {
- return nil, fmt.Errorf("failed to build method [%s] response: %s", m.ID, err)
- }
-
- rdesc.Methods[strings.TrimPrefix(m.ID, fmt.Sprintf("%s.", a.Name))] = &m
- }
-
- return &rdesc, nil
-}
-
-func (m *restMethod) buildMethodParamRef(desc *endpoints.APIReqRespDescriptor, ref *endpoints.APISchemaRef, canPath bool) (
- *restMethodParameterRef, error) {
- pathParams := map[string]struct{}{}
- if canPath {
- for _, p := range m.ParameterOrder {
- pathParams[p] = struct{}{}
- }
- }
-
- for name, param := range desc.Params {
- rmp := restMethodParameter{
- Required: param.Required, // All path parameters are required.
- }
- rmp.Type, rmp.Format = convertBackendType(param.Type)
- _, inPath := pathParams[name]
-
- if m.HTTPMethod == "GET" && !inPath {
- rmp.Location = "query"
- } else {
- rmp.Location = "path"
- rmp.Required = true
- }
- m.Parameters[name] = &rmp
- }
-
- if desc.Body == "empty" {
- return nil, nil
- }
-
- paramRef := restMethodParameterRef{
- ParameterName: desc.BodyName,
- }
- if ref != nil {
- paramRef.Ref = ref.Ref
- }
-
- return &paramRef, nil
-}
-
-func convertBackendType(t string) (string, string) {
- switch t {
- case "int32":
- return "integer", "int32"
- case "int64":
- return "string", "int64"
- case "uint32":
- return "integer", "uint32"
- case "uint64":
- return "string", "uint64"
- case "float":
- return "number", "float"
- case "double":
- return "number", "double"
- case "boolean":
- return "boolean", ""
- case "string":
- return "string", ""
- }
-
- return "", ""
-}
-
-func parseParameterOrderFromPath(path string) []string {
- matches := reParam.FindAllStringSubmatch(path, -1)
- if len(matches) == 0 {
- return nil
- }
-
- po := make([]string, 0, len(matches))
- for _, match := range matches {
- po = append(po, match[1])
- }
- return po
-}
-
-// directoryList is a Google Cloud Endpoints frontend directory list structure.
-//
-// This is the first-level directory structure, which exports a series of API
-// items.
-type directoryList struct {
- Kind string `json:"kind,omitempty"`
- DiscoveryVersion string `json:"discoveryVersion,omitempty"`
- Items []*directoryItem `json:"items,omitempty"`
-}
-
-// directoryItem is a single API's directoryList entry.
-//
-// This is a This is the second-level directory structure which exports a single
-// API's methods.
-//
-// The directoryItem exports a REST API (restDescription) at its relative
-// DiscoveryLink.
-type directoryItem struct {
- Kind string `json:"kind,omitempty"`
- ID string `json:"id,omitempty"`
- Name string `json:"name,omitempty"`
- Version string `json:"version,omitempty"`
- Title string `json:"title,omitempty"`
- Description string `json:"description,omitempty"`
- DiscoveryRestURL string `json:"discoveryRestUrl,omitempty"`
- DiscoveryLink string `json:"discoveryLink,omitempty"`
- RootURL string `json:"rootUrl,omitempty"`
- Preferred bool `json:"preferred,omitempty"`
-}
-
-// restDescription is a hosted JSON at a rest endpoint. It is translated from a
-// singleAPI into a form served by the frontend.
-type restDescription struct {
- Kind string `json:"kind,omitempty"`
- DiscoveryVersion string `json:"discoveryVersion,omitempty"`
-
- Protocol string `json:"protocol,omitempty"`
- ID string `json:"id,omitempty"`
- Name string `json:"name,omitempty"`
- Version string `json:"version,omitempty"`
- Description string `json:"description,omitempty"`
- BaseURL string `json:"baseUrl,omitempty"`
- BasePath string `json:"basePath,omitempty"`
- RootURL string `json:"rootUrl,omitempty"`
- ServicePath string `json:"servicePath,omitempty"`
- Root string `json:"root,omitempty"`
- DefaultVersion bool `json:"defaultVersion,omitempty"`
-
- Schemas map[string]*endpoints.APISchemaDescriptor `json:"schemas,omitempty"`
- Methods map[string]*restMethod `json:"methods,omitempty"`
-}
-
-type restMethod struct {
- ID string `json:"id,omitempty"`
- Path string `json:"path,omitempty"`
- HTTPMethod string `json:"httpMethod,omitempty"`
- Description string `json:"description,omitempty"`
- Parameters map[string]*restMethodParameter `json:"parameters,omitempty"`
- ParameterOrder []string `json:"parameterOrder,omitempty"`
- Request *restMethodParameterRef `json:"request,omitempty"`
- Response *restMethodParameterRef `json:"response,omitempty"`
- Scopes []string `json:"scopes,omitempty"`
-}
-
-type restMethodParameter struct {
- Type string `json:"type,omitempty"`
- Format string `json:"format,omitempty"`
- Location string `json:"location,omitempty"`
- Required bool `json:"required,omitempty"`
-}
-
-type restMethodParameterRef struct {
- Ref string `json:"$ref,omitempty"`
- ParameterName string `json:"parameterName,omitempty"`
-}
« no previous file with comments | « appengine/ephelper/context.go ('k') | appengine/ephelper/epfrontend/discovery_test.go » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698