api调用
GET https://api.softlayer.com/rest/v3/SoftLayer_Product_Package/257/getConfiguration?objectMask=mask[itemCategory]
返回[]datatypes.Product_Package_Order_Configuration在其中ItemCategory填充的对象。样本输出:
[]datatypes.Product_Package_Order_Configuration
ItemCategory
{ "id": 7167, "isRequired": 0, "itemCategoryId": 390, "orderStepId": 1, "packageId": 257, "sort": 0, "itemCategory": { "categoryCode": "trusted_platform_module", "id": 390, "name": "Server Security", "quantityLimit": 1, "sortOrder": 0 } },
当我在go中尝试相同的呼叫时itemCategory,即使我在掩码中声明了该呼叫,也不会填充该呼叫。请指教。
itemCategory
package main import ( "fmt" "github.com/softlayer/softlayer-go/services" "github.com/softlayer/softlayer-go/session" "encoding/json" ) func main() { // SoftLayer API username and key username := "set-me" apikey := "set-me" // Create a session sess := session.New(username, apikey) // Enable debug sess.Debug = true // Get SoftLayer_Account service service := services.GetProductPackageService(sess) // Object-Mask to get specific Vlan's information mask := "itemCategory" // Call to getNetworkVlans in order to retrieve vlans according to filter. result, err := service.Mask(mask).Id(257).GetConfiguration() if err != nil { fmt.Printf("\n Unable to retrieve config:\n - %s\n", err) return } // Following helps to print the result in json format. jsonFormat, jsonErr := json.MarshalIndent(result,""," ") if jsonErr != nil { fmt.Println(jsonErr) return } fmt.Println(string(jsonFormat)) }
样本输出:
->>>Request: 2018/05/09 09:24:36 POST /xmlrpc/v3.1/SoftLayer_Product_Package HTTP/1.1 Host: api.softlayer.com User-Agent: Go-http-client/1.1 Content-Length: 1055 Content-Type: text/xml Accept-Encoding: gzip <?xml version="1.0" encoding="UTF-8"?><methodCall><methodName>getConfiguration</methodName><params><param><value><struct><member><name>headers</name><value><struct><member><name>User-Agent</name><value><string>softlayer-go/v0.1.0-alpha (go1.9.2;amd64;darwin)</string></value></member><member><name>authenticate</name><value><struct><member><name>username</name><value><string>[[SL_USER]]</string></value></member><member><name>apiKey</name><value><string>[[SL_APIKEY]]</string></value></member></struct></value></member><member><name>SoftLayer_Product_PackageInitParameters</name><value><struct><member><name>id</name><value><int>257</int></value></member></struct></value></member><member><name>SoftLayer_Product_PackageObjectMask</name><value><struct><member><name>mask</name><value><struct><member><name>itemCategory</name><value><array><data></data></array></value></member></struct></value></member></struct></value></member></struct></value></member></struct></value></param></params></methodCall> 2018/05/09 09:24:36 <<<-Response: 2018/05/09 09:24:36 HTTP/1.1 200 OK Connection: close Transfer-Encoding: chunked Cache-Control: private Content-Type: text/xml Date: Wed, 09 May 2018 14:24:36 GMT Server: Apache Softlayer-Total-Items: 39 Strict-Transport-Security: max-age=31536000 Vary: Accept-Encoding X-Frame-Options: SAMEORIGIN
然后返回一个具有与以下相同数据的html字符串,该示例条目:
{ "id": 7167, "isRequired": 0, "itemCategoryId": 390, "orderStepId": 1, "packageId": 257, "sort": 0 },
默认端点是REST,但是在您的环境中,您使用的是xmlrpc,这可能是由于〜/ .softlayer文件的存在,并且在此文件中将其配置为XMLRPC入口。
有关更多信息,请参见以下文档:https : //github.com/softlayer/softlayer-go
XMLRPC enpoint会发生此问题,您可以在go GitHub中进行报告。 https://github.com/softlayer/softlayer- go/issues/
尝试使用REST端点输入代码,例如以下示例:
endpoint := "https://api.softlayer.com/rest/v3" // Create a session sess := session.New(username, apikey, endpoint)