Beginning framework
This commit is contained in:
		
							
								
								
									
										109
									
								
								itglue.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										109
									
								
								itglue.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,109 @@ | ||||
| package itglue | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"io" | ||||
| 	"io/ioutil" | ||||
| 	"log" | ||||
| 	"net/http" | ||||
| 	"net/url" | ||||
| ) | ||||
|  | ||||
| func check(err error) { | ||||
| 	if err != nil { | ||||
| 		log.Fatal(err) | ||||
| 	} | ||||
| } | ||||
|  | ||||
| //ITGAPI contains the ITG API URL for North America, as well as the API key. | ||||
| //Think of it as an instance of the API client | ||||
| type ITGAPI struct { | ||||
| 	Site   string //Full URL ITG API | ||||
| 	APIKey string //API Key | ||||
| } | ||||
|  | ||||
| //NewITGAPI expects the API key to be passed to it | ||||
| //Returns a pointer to an ITGAPI struct | ||||
| func NewITGAPI(apiKey string) *ITGAPI { | ||||
| 	return &ITGAPI{Site: "https://api.itglue.com", APIKey: apiKey} | ||||
| } | ||||
|  | ||||
| func getHTTPResponseBody(resp *http.Response) []byte { | ||||
| 	if resp.StatusCode != http.StatusOK { | ||||
|  | ||||
| 		out := fmt.Sprintf("ITG returned HTTP status code %s\n%s", resp.Status, resp.Body) | ||||
| 		log.Fatal(out) | ||||
| 		return make([]byte, 0) //TBD: Don't hack | ||||
| 	} | ||||
|  | ||||
| 	body, err := ioutil.ReadAll(resp.Body) | ||||
| 	check(err) | ||||
|  | ||||
| 	return body | ||||
| } | ||||
|  | ||||
| //BuildURL expects a restaction to be passed to it | ||||
| //Returns the full request URL containing the ITG API domain prepended to the rest action | ||||
| func (itg *ITGAPI) BuildURL(restAction string) *url.URL { | ||||
| 	var URL *url.URL | ||||
| 	URL, err := url.Parse(itg.Site) | ||||
| 	check(err) | ||||
| 	URL.Path += restAction | ||||
| 	return URL | ||||
| } | ||||
|  | ||||
| //GetRequest allows a custom GET request to the API to be made. | ||||
| //Also used internally by this package by the binding functions | ||||
| //Expects URL to be passed | ||||
| //Returns the response body as a byte slice | ||||
| func (itg *ITGAPI) GetRequest(URL *url.URL) []byte { | ||||
| 	client := &http.Client{} | ||||
| 	req, err := http.NewRequest("GET", URL.String(), nil) | ||||
| 	check(err) | ||||
| 	req.Header.Set("Content-Type", "application/vnd.api+json") | ||||
| 	req.Header.Set("x-api-key", itg.APIKey) | ||||
| 	req.Header.Set("cache-control", "no-cache") | ||||
| 	response, err := client.Do(req) | ||||
| 	check(err) | ||||
| 	defer response.Body.Close() | ||||
|  | ||||
| 	return getHTTPResponseBody(response) | ||||
| } | ||||
|  | ||||
| //PostRequest allows a custom POST request tot he API to be made | ||||
| //Also used internally by this package by the binding functions | ||||
| //Expects a URL and a body to be passed | ||||
| //Returns the response body as a byte slice | ||||
| func (itg *ITGAPI) PostRequest(URL *url.URL, body io.Reader) []byte { | ||||
| 	client := &http.Client{} | ||||
| 	req, err := http.NewRequest("POST", URL.String(), body) | ||||
| 	check(err) | ||||
| 	req.Header.Set("Content-Type", "application/vnd.api+json") | ||||
| 	req.Header.Set("x-api-key", itg.APIKey) | ||||
| 	req.Header.Set("cache-control", "no-cache") | ||||
| 	response, err := client.Do(req) | ||||
| 	check(err) | ||||
| 	defer response.Body.Close() | ||||
|  | ||||
| 	return getHTTPResponseBody(response) | ||||
|  | ||||
| } | ||||
|  | ||||
| //PatchRequest allows a custom PATCH request tot he API to be made | ||||
| //Also used internally by this package by the binding functions | ||||
| //Expects a URL and a body to be passed | ||||
| //Returns the response body as a byte slice | ||||
| func (itg *ITGAPI) PatchRequest(URL *url.URL, body io.Reader) []byte { | ||||
| 	client := &http.Client{} | ||||
| 	req, err := http.NewRequest("PATCH", URL.String(), body) | ||||
| 	check(err) | ||||
| 	req.Header.Set("Content-Type", "application/vnd.api+json") | ||||
| 	req.Header.Set("x-api-key", itg.APIKey) | ||||
| 	req.Header.Set("cache-control", "no-cache") | ||||
| 	response, err := client.Do(req) | ||||
| 	check(err) | ||||
| 	defer response.Body.Close() | ||||
|  | ||||
| 	return getHTTPResponseBody(response) | ||||
|  | ||||
| } | ||||
							
								
								
									
										36
									
								
								organizations.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								organizations.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,36 @@ | ||||
| package itglue | ||||
|  | ||||
| import "fmt" | ||||
|  | ||||
| //Organization maps JSON data from the ITG Organization resource to Go struct | ||||
| type Organization struct { | ||||
| 	Data struct { | ||||
| 		ID         int    `json:"id"` | ||||
| 		Type       string `json:"type"` | ||||
| 		Attributes struct { | ||||
| 			Name                   string `json:"name"` | ||||
| 			Description            string `json:"description"` | ||||
| 			OrganizationTypeID     int    `json:"organization-type-id"` | ||||
| 			OrganizationTypeName   string `json:"organization-type-name"` | ||||
| 			OrganizationStatusID   int    `json:"organization-status-id"` | ||||
| 			OrganizationStatusName string `json:"organization-status-name"` | ||||
| 			Logo                   string `json:"logo"` | ||||
| 			QuickNotes             string `json:"quick-notes"` | ||||
| 			ShortName              string `json:"short-name"` | ||||
| 			CreatedAt              string `json:"created-at"` | ||||
| 			UpdatedAt              string `json:"updated-at"` | ||||
| 		} `json:"attributes"` | ||||
| 	} `json:"data"` | ||||
| } | ||||
|  | ||||
| //GetOrganizationByID expects an ITG organization ID | ||||
| //Returns a pointer to an Organization struct | ||||
| func (itg *ITGAPI) GetOrganizationByID(organizationID int) { | ||||
| 	URL := itg.BuildURL(fmt.Sprintf("/organizations/%d", organizationID)) | ||||
|  | ||||
| 	body := itg.GetRequest(URL) | ||||
| 	fmt.Print(string(body)) | ||||
|  | ||||
| 	//organization := Organization{} | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user