Hi Roshan,
I'm not developing any APIs in this particular project. This is merely a
client side application that would utilize the existing Import/Export APIs.
GoLang was selected since it allows creating binaries hence executing
directly; sparing the use of any virtual runtime.

Thanks
Menuka

*Menuka Warushavithana*
*Software Engineering Intern*
*WSO2*

*Moblie:      + <%2B%2094%2011%202145345%20%C2%A0Ext.%205737> 94 77 6979690*



On Mon, Aug 14, 2017 at 9:19 AM, roshan wijesena <roshan86...@gmail.com>
wrote:

> Hello Menuka,
>
> It is Interesting to know why we have selected GoLang to develop this API
> rather JAVA? Will it work with a JVM OOTB with out installing any
> additional libs?
>
> Regards
> Roshan.
>
> On Mon, Aug 14, 2017 at 1:39 PM, Isuru Haththotuwa <isu...@wso2.com>
> wrote:
>
>> Just to clarify, is this working with POST?
>>
>> On Mon, Aug 14, 2017 at 9:01 AM, Isuru Haththotuwa <isu...@wso2.com>
>> wrote:
>>
>>> The best way to figure out this would be to debug the MSF4J layer.
>>>
>>> @Thusitha/Chanaka: Can you please give some input on where to start
>>> debugging for this particular case?
>>>
>>> On Sun, Aug 13, 2017 at 12:54 PM, Menuka Warushavithana <men...@wso2.com
>>> > wrote:
>>>
>>>> Hi,
>>>> I'm working on creating a CLI tool for importing and exporting APIs
>>>> between different environments (for WSO2 API Manager 3.0.0) using Golang.
>>>>
>>>> I have an issue with importing APIs.
>>>> The following curl command works fine.
>>>> *`curl -k -F "file=@exported.zip" -X PUT -H "Authorization: Bearer
>>>> <access_token>" https://localhost:9292/api/am/publisher/v1.0/import/apis
>>>> <https://localhost:9292/api/am/publisher/v1.0/import/apis>`*
>>>>
>>>> The problem is with mapping this to Go code.
>>>> Here's what I wrote at first.
>>>>
>>>> func main() {
>>>>     data, err := os.Open("./exported.zip")
>>>>     accessToken := "<access_token>"
>>>>     if err != nil {
>>>>         fmt.Println("Error oening file")
>>>>         panic(err)
>>>>     }
>>>>
>>>>     req, reqErr := http.NewRequest(http.MethodPut, "
>>>> https://localhost:9292/api/am/publisher/v1.0/import/apis";, data)
>>>>     if reqErr != nil {
>>>>         fmt.Println("Error creating request")
>>>>         panic(reqErr)
>>>>     }
>>>>
>>>>     req.Header.Add("Content-Type", "multipart/form-data") // response
>>>> is 500 with or without this line
>>>>     req.Header.Add("Authorization", "Bearer "+accessToken)
>>>>
>>>>     tr := &http.Transport{
>>>>         TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // for
>>>> skipping errors in https
>>>>     }
>>>>
>>>>     client := &http.Client{Transport: tr}
>>>>     res, resErr := client.Do(req)
>>>>
>>>>     if resErr != nil {
>>>>         fmt.Println("Error in response")
>>>>         panic(resErr)
>>>>     }
>>>>
>>>>     body, err := ioutil.ReadAll(res.Body)
>>>>
>>>>     fmt.Println("Response:", res)
>>>>     fmt.Println("Body:", string(body))
>>>>     fmt.Println("Status:", res.Status)
>>>>
>>>>     defer res.Body.Close()
>>>> }
>>>>
>>>> This returns a *500 Internal Server Error.*
>>>>
>>>> But the request works fine with *Postman* client. Therefore, I tried
>>>> putting the extra headers generated by Postman in Go code.
>>>>
>>>> func main() {
>>>>     url := "https://localhost:9292/api/am/publisher/v1.0";
>>>>     accessToken := "<access_token>"
>>>>
>>>>     payload := strings.NewReader("------WebKi
>>>> tFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data;
>>>> name=\"file\"; filename=\"./exported.zip\"\r\nContent-Type:
>>>> application/zip\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--")
>>>>
>>>>     req, _ := http.NewRequest(http.MethodPut, url, payload)
>>>>
>>>>     req.Header.Add("content-type", "multipart/form-data;
>>>> boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW")
>>>>     req.Header.Add("authorization", "Bearer "+accessToken)
>>>>     req.Header.Add("cache-control", "no-cache")
>>>>
>>>>     tr := &http.Transport{
>>>>         TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, // for
>>>> skipping errors in https
>>>>     }
>>>>
>>>>     client := &http.Client{Transport: tr}
>>>>     resp, _ := client.Do(req)
>>>>
>>>>     if resp != nil {
>>>>
>>>>         body, _ := ioutil.ReadAll(resp.Body)
>>>>
>>>>         fmt.Println(resp)
>>>>         fmt.Println(string(body))
>>>>     } else {
>>>>         fmt.Println("Null Response")
>>>>     }
>>>>
>>>>     fmt.Println(resp.Status)
>>>> }
>>>>
>>>> This returns a *405 - Method Not Allowed*
>>>>
>>>> So, Postman works. Curl works. Go does not.
>>>> I googled on 'multipart/form-data' under HTTP, but that didn't help
>>>> either.
>>>>
>>>> Your advice is much appreciated in solving this issue.
>>>>
>>>> Thanks and Regards
>>>>
>>>> *Menuka Warushavithana*
>>>> *Software Engineering Intern*
>>>> *WSO2*
>>>>
>>>> *Moblie:      + <%2B%2094%2011%202145345%20%C2%A0Ext.%205737> 94 77
>>>> 6979690 <077%20697%209690>*
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Thanks and Regards,
>>>
>>> Isuru H.
>>> +94 716 358 048 <071%20635%208048>* <http://wso2.com/>*
>>>
>>>
>>>
>>
>>
>> --
>> Thanks and Regards,
>>
>> Isuru H.
>> +94 716 358 048 <+94%2071%20635%208048>* <http://wso2.com/>*
>>
>>
>>
>> _______________________________________________
>> Dev mailing list
>> Dev@wso2.org
>> http://wso2.org/cgi-bin/mailman/listinfo/dev
>>
>>
>
_______________________________________________
Dev mailing list
Dev@wso2.org
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to