newmeta/meta.go (114 lines of code) (raw):

package newmeta import ( "encoding/json" "strings" aliyunopenapimeta "github.com/aliyun/aliyun-cli/v3/aliyun-openapi-meta" ) // { // "products": [ // { // "code": "ARMS", // "name": "Application Real-Time Monitoring Service", // "version": "2019-08-08", // "endpointType": "regional", // "endpoints": { // "us-west-1": { // "regionId": "us-west-1", // "regionName": "US (Silicon Valley)", // "areaId": "europeAmerica", // "areaName": "Europe & Americas", // "public": "arms.us-west-1.aliyuncs.com", // "vpc": "arms-vpc.us-east-1.aliyuncs.com" // } // } // } // ] // } type ProductSet struct { Products []Product `json:"products"` } type Product struct { Code string `json:"code"` Name string `json:"name"` Version string `json:"version"` EndpointType string `json:"endpointType"` Endpoints map[string]Endpoint `json:"endpoints"` } type Endpoint struct { RegionId string `json:"regionId"` Name string `json:"regionName"` AreaId string `json:"areaId"` AreaName string `json:"areaName"` Public string `json:"public"` VPC string `json:"vpc"` } // { // "version": "2017-09-12", // "style": "rpc", // "apis": { // "ActiveFlowLog": { // "title": "ActiveFlowLog", // "summary": "Enables a flow log. After the flow log is enabled, the system collects traffic information about a specified resource.", // "deprecated": false // } // } // } type Version struct { Version string `json:"version"` Style string `json:"style"` APIs map[string]API `json:"apis"` } type API struct { Title string `json:"title"` Summary string `json:"summary"` Deprecated bool `json:"deprecated"` } // { // "name": "AddEntriesToAcl", // "security": [ // "AK" // ], // "deprecated": false, // "protocol": "HTTP|HTTPS", // "method": "GET|POST", // "pathPattern": "", // "parameters": [ // { // "name": "AclEntries", // "description": "The IP entries that you want to add. You can add up to 20 IP entries in each call.", // "position": "Query", // "type": "Array", // "required": true // } // ] // } type APIDetail struct { Name string `json:"name"` Auth []string `json:"security"` Deprecated bool `json:"deprecated"` Protocol string `json:"protocol"` Method string `json:"method"` PathPattern string `json:"pathPattern"` Parameters []RequestParameter `json:"parameters"` } func (api *APIDetail) IsAnonymousAPI() bool { for _, v := range api.Auth { if v == "Anonymous" { return true } } return false } type RequestParameter struct { Name string `json:"name"` Description string `json:"description"` Position string `json:"position"` Type string `json:"type"` Required bool `json:"required"` } func GetProductName(language, code string) (name string, err error) { content, err := GetMetadata(language, "/products.json") if err != nil { return } products := new(ProductSet) err = json.Unmarshal(content, &products) if err != nil { return } for _, p := range products.Products { if strings.EqualFold(p.Code, code) { name = strings.TrimSpace(p.Name) break } } return } func GetAPI(language, code, name string) (api *API, err error) { content, err := GetMetadata(language, "/"+strings.ToLower(code)+"/version.json") if err != nil { return } version := new(Version) err = json.Unmarshal(content, &version) if err != nil { return } if found, ok := version.APIs[name]; ok { api = &found } return } func GetAPIDetail(language, code, name string) (api *APIDetail, err error) { content, err := GetMetadata(language, "/"+strings.ToLower(code)+"/"+name+".json") if err != nil { return } detail := new(APIDetail) err = json.Unmarshal(content, &detail) if err != nil { return } api = detail return } func GetMetadataPrefix(language string) string { if language == "en" { return "en-US" } return "zh-CN" } func GetMetadata(language string, path string) (content []byte, err error) { content, err = aliyunopenapimeta.Metadatas.ReadFile(GetMetadataPrefix(language) + path) return }