github.com/opentelekomcloud/gophertelekomcloud@v0.9.3/openstack/apigw/v2/api/Create.go (about)

     1  package api
     2  
     3  import (
     4  	golangsdk "github.com/opentelekomcloud/gophertelekomcloud"
     5  	"github.com/opentelekomcloud/gophertelekomcloud/internal/build"
     6  	"github.com/opentelekomcloud/gophertelekomcloud/internal/extract"
     7  )
     8  
     9  type CreateOpts struct {
    10  	GatewayID           string            `json:"-"`
    11  	GroupID             string            `json:"group_id" required:"true"`
    12  	Name                string            `json:"name" required:"true"`
    13  	Type                int               `json:"type" required:"true"`
    14  	Version             string            `json:"version,omitempty"`
    15  	ReqProtocol         string            `json:"req_protocol" required:"true"`
    16  	ReqMethod           string            `json:"req_method" required:"true"`
    17  	ReqUri              string            `json:"req_uri" required:"true"`
    18  	AuthType            string            `json:"auth_type" required:"true"`
    19  	AuthOpt             *AuthOpt          `json:"auth_opt,omitempty"`
    20  	Cors                bool              `json:"cors,omitempty"`
    21  	MatchMode           string            `json:"match_mode,omitempty"`
    22  	BackendType         string            `json:"backend_type" required:"true"`
    23  	Description         string            `json:"remark,omitempty"`
    24  	BodyDescription     string            `json:"body_remark,omitempty"`
    25  	ResultNormalSample  string            `json:"result_normal_sample,omitempty"`
    26  	ResultFailureSample string            `json:"result_failure_sample,omitempty"`
    27  	AuthorizerID        string            `json:"authorizer_id,omitempty"`
    28  	Tags                []string          `json:"tags,omitempty"`
    29  	RomaAppId           string            `json:"roma_app_id,omitempty"`
    30  	DomainName          string            `json:"domain_name,omitempty"`
    31  	ResponseID          string            `json:"response_id,omitempty"`
    32  	ContentType         string            `json:"content_type,omitempty"`
    33  	MockInfo            *MockInfo         `json:"mock_info,omitempty"`
    34  	FuncInfo            *FuncInfo         `json:"func_info,omitempty"`
    35  	ReqParams           []ReqParams       `json:"req_params,omitempty"`
    36  	BackendParams       []BackendParams   `json:"backend_params,omitempty"`
    37  	PolicyMocks         []PolicyMocks     `json:"policy_mocks,omitempty"`
    38  	PolicyFunctions     []PolicyFunctions `json:"policy_functions,omitempty"`
    39  	BackendApi          *BackendApi       `json:"backend_api,omitempty"`
    40  	PolicyHttps         []PolicyHttps     `json:"policy_https,omitempty"`
    41  }
    42  
    43  type AuthOpt struct {
    44  	AppCodeAuthType string `json:"app_code_auth_type" required:"true"`
    45  }
    46  
    47  type MockInfo struct {
    48  	Description  string `json:"remark,omitempty"`
    49  	Response     string `json:"result_content,omitempty"`
    50  	Version      string `json:"version,omitempty"`
    51  	AuthorizerID string `json:"authorizer_id,omitempty"`
    52  }
    53  
    54  type FuncInfo struct {
    55  	FunctionUrn    string `json:"function_urn" required:"true"`
    56  	Description    string `json:"remark,omitempty"`
    57  	InvocationType string `json:"invocation_type" required:"true"`
    58  	NetworkType    string `json:"network_type" required:"true"`
    59  	Version        string `json:"version,omitempty"`
    60  	AliasUrn       string `json:"alias_urn,omitempty"`
    61  	Timeout        int    `json:"timeout" required:"true"`
    62  	AuthorizerID   string `json:"authorizer_id,omitempty"`
    63  }
    64  
    65  type ReqParams struct {
    66  	Name         string `json:"name" required:"true"`
    67  	Type         string `json:"type" required:"true"`
    68  	Location     string `json:"location" required:"true"`
    69  	DefaultValue string `json:"default_value,omitempty"`
    70  	SampleValue  string `json:"sample_value,omitempty"`
    71  	Required     *int   `json:"required,omitempty"`
    72  	ValidEnable  *int   `json:"valid_enable,omitempty"`
    73  	Description  string `json:"remark,omitempty"`
    74  	Enumerations string `json:"enumerations,omitempty"`
    75  	MinNum       *int   `json:"min_num,omitempty"`
    76  	MaxNum       *int   `json:"max_num,omitempty"`
    77  	MinSize      *int   `json:"min_size,omitempty"`
    78  	MaxSize      *int   `json:"max_size,omitempty"`
    79  	PassThrough  *int   `json:"pass_through,omitempty"`
    80  	Regular      string `json:"regular,omitempty"`
    81  	JsonSchema   string `json:"json_schema,omitempty"`
    82  }
    83  
    84  type PolicyMocks struct {
    85  	Response      string          `json:"result_content,omitempty"`
    86  	EffectMode    string          `json:"effect_mode" required:"true"`
    87  	Name          string          `json:"name" required:"true"`
    88  	BackendParams []BackendParams `json:"backend_params,omitempty"`
    89  	Conditions    []Conditions    `json:"conditions" required:"true"`
    90  	AuthorizerID  string          `json:"authorizer_id,omitempty"`
    91  }
    92  
    93  type BackendParams struct {
    94  	Origin      string `json:"origin" required:"true"`
    95  	Name        string `json:"name" required:"true"`
    96  	Description string `json:"remark,omitempty"`
    97  	Location    string `json:"location" required:"true"`
    98  	Value       string `json:"value" required:"true"`
    99  }
   100  
   101  type Conditions struct {
   102  	ReqParamName    string `json:"req_param_name,omitempty"`
   103  	ConditionType   string `json:"condition_type,omitempty"`
   104  	ConditionOrigin string `json:"condition_origin" required:"true"`
   105  	ConditionValue  string `json:"condition_value" required:"true"`
   106  }
   107  
   108  type PolicyFunctions struct {
   109  	FunctionUrn    string          `json:"function_urn" required:"true"`
   110  	InvocationType string          `json:"invocation_type" required:"true"`
   111  	NetworkType    string          `json:"network_type" required:"true"`
   112  	Version        string          `json:"version,omitempty"`
   113  	AliasUrn       string          `json:"alias_urn,omitempty"`
   114  	Timeout        int             `json:"timeout,omitempty"`
   115  	EffectMode     string          `json:"effect_mode" required:"true"`
   116  	Name           string          `json:"name" required:"true"`
   117  	BackendParams  []BackendParams `json:"backend_params,omitempty"`
   118  	Conditions     []Conditions    `json:"conditions" required:"true"`
   119  	AuthorizerID   string          `json:"authorizer_id,omitempty"`
   120  }
   121  
   122  type BackendApi struct {
   123  	AuthorizerID     string          `json:"authorizer_id,omitempty"`
   124  	UrlDomain        string          `json:"url_domain,omitempty"`
   125  	ReqProtocol      string          `json:"req_protocol" required:"true"`
   126  	Description      string          `json:"remark,omitempty"`
   127  	ReqMethod        string          `json:"req_method" required:"true"`
   128  	Version          string          `json:"version,omitempty"`
   129  	ReqUri           string          `json:"req_uri" required:"true"`
   130  	Timeout          int             `json:"timeout" required:"true"`
   131  	EnableClientSSL  *bool           `json:"enable_client_ssl,omitempty"`
   132  	RetryCount       string          `json:"retry_count,omitempty"`
   133  	VpcChannelInfo   *VpcChannelInfo `json:"vpc_channel_info,omitempty"`
   134  	VpcChannelStatus *int            `json:"vpc_channel_status,omitempty"`
   135  }
   136  
   137  type VpcChannelInfo struct {
   138  	VpcChannelProxyHost string `json:"vpc_channel_proxy_host,omitempty"`
   139  	VpcChannelID        string `json:"vpc_channel_id" required:"true"`
   140  }
   141  
   142  type PolicyHttps struct {
   143  	UrlDomain        string          `json:"url_domain,omitempty"`
   144  	ReqProtocol      string          `json:"req_protocol" required:"true"`
   145  	ReqMethod        string          `json:"req_method" required:"true"`
   146  	ReqUri           string          `json:"req_uri" required:"true"`
   147  	Timeout          *int            `json:"timeout,omitempty"`
   148  	RetryCount       string          `json:"retry_count,omitempty"`
   149  	EffectMode       string          `json:"effect_mode" required:"true"`
   150  	Name             string          `json:"name" required:"true"`
   151  	BackendParams    []BackendParams `json:"backend_params,omitempty"`
   152  	Conditions       []Conditions    `json:"conditions" required:"true"`
   153  	AuthorizerID     string          `json:"authorizer_id,omitempty"`
   154  	VpcChannelInfo   *VpcChannelInfo `json:"vpc_channel_info,omitempty"`
   155  	VpcChannelStatus *int            `json:"vpc_channel_status,omitempty"`
   156  }
   157  
   158  func Create(client *golangsdk.ServiceClient, opts CreateOpts) (*ApiResp, error) {
   159  	b, err := build.RequestBody(opts, "")
   160  	if err != nil {
   161  		return nil, err
   162  	}
   163  
   164  	raw, err := client.Post(client.ServiceURL("apigw", "instances", opts.GatewayID, "apis"), b, nil, &golangsdk.RequestOpts{
   165  		OkCodes: []int{201},
   166  	})
   167  	if err != nil {
   168  		return nil, err
   169  	}
   170  
   171  	var res ApiResp
   172  
   173  	err = extract.Into(raw.Body, &res)
   174  	return &res, err
   175  }
   176  
   177  type ApiResp struct {
   178  	GroupID             string            `json:"group_id"`
   179  	Name                string            `json:"name"`
   180  	Type                int               `json:"type"`
   181  	Version             string            `json:"version"`
   182  	ReqProtocol         string            `json:"req_protocol"`
   183  	ReqMethod           string            `json:"req_method"`
   184  	ReqUri              string            `json:"req_uri"`
   185  	AuthType            string            `json:"auth_type"`
   186  	AuthOpt             *AuthOpt          `json:"auth_opt"`
   187  	Cors                bool              `json:"cors"`
   188  	MatchMode           string            `json:"match_mode"`
   189  	BackendType         string            `json:"backend_type"`
   190  	Description         string            `json:"remark"`
   191  	BodyDescription     string            `json:"body_remark"`
   192  	ResultNormalSample  string            `json:"result_normal_sample"`
   193  	ResultFailureSample string            `json:"result_failure_sample"`
   194  	AuthorizerID        string            `json:"authorizer_id"`
   195  	Tags                []string          `json:"tags"`
   196  	ResponseID          string            `json:"response_id"`
   197  	RomaAppId           string            `json:"roma_app_id"`
   198  	RomaAppName         string            `json:"roma_app_name"`
   199  	DomainName          string            `json:"domain_name"`
   200  	ContentType         string            `json:"content_type"`
   201  	ID                  string            `json:"id"`
   202  	Status              int               `json:"status"`
   203  	ArrangeNecessary    int               `json:"arrange_necessary"`
   204  	RegisterTime        string            `json:"register_time"`
   205  	UpdateTime          string            `json:"update_time"`
   206  	GroupName           string            `json:"group_name"`
   207  	GroupVersion        string            `json:"group_version"`
   208  	RunEnvId            string            `json:"run_env_id"`
   209  	RunEnvName          string            `json:"run_env_name"`
   210  	PublishID           string            `json:"publish_id"`
   211  	PublishTime         string            `json:"publish_time"`
   212  	CustomApiId         string            `json:"ld_api_id"`
   213  	BackendApi          *BackendApi       `json:"backend_api"`
   214  	ApiGroupInfo        *ApiGroupInfo     `json:"api_group_info"`
   215  	FuncInfo            *FuncInfo         `json:"func_info"`
   216  	MockInfo            *MockInfo         `json:"mock_info"`
   217  	ReqParams           []ReqParams       `json:"req_params"`
   218  	BackendParams       []BackendParams   `json:"backend_params"`
   219  	PolicyMocks         []PolicyMocks     `json:"policy_mocks"`
   220  	PolicyFunctions     []PolicyFunctions `json:"policy_functions"`
   221  	PolicyHttps         []PolicyHttps     `json:"policy_https"`
   222  }
   223  
   224  type ApiGroupInfo struct {
   225  	ID           string       `json:"id"`
   226  	Name         string       `json:"name"`
   227  	Status       int          `json:"status"`
   228  	SlDomain     string       `json:"sl_domain"`
   229  	RegisterTime string       `json:"register_time"`
   230  	UpdateTime   string       `json:"update_time"`
   231  	OnSellStatus int          `json:"on_sell_status"`
   232  	UrlDomains   []UrlDomains `json:"url_domains"`
   233  }
   234  
   235  type UrlDomains struct {
   236  	ID                  string `json:"id"`
   237  	Domain              string `json:"domain"`
   238  	CnameStatus         int    `json:"cname_status"`
   239  	SslID               string `json:"ssl_id"`
   240  	SslName             string `json:"ssl_name"`
   241  	MinSslVersion       string `json:"min_ssl_version"`
   242  	VfClientCertEnabled bool   `json:"verified_client_certificate_enabled"`
   243  	HasTrustedCa        bool   `json:"is_has_trusted_root_ca"`
   244  }