--- sidebar_position: 20 --- # Dogs API

:::note This tutorial has been kindly provided by [@tatadan](https://twitter.com/tatadan) and forms part of their [Wails Examples Repository](https://github.com/tataDan/wails-v2-examples). ::: In this tutorial we are going to develop an application that retrieves photos of dogs from the web and then displays them. ### Create the project Let's create the application. From a terminal enter: ```wails init -n dogs-api -t svelte``` Note: We could optionally add `-ide vscode` or `-ide goland` to the end of this command if you wanted to add IDE support. Now let's `cd dogs-api` and start editing the project files. ### Remove unused code We will start by removing some elements that we know we will not use: - Open `app.go` and remove the following lines: ```go // Greet returns a greeting for the given name func (a *App) Greet(name string) string { return fmt.Sprintf("Hello %s, It's show time!", name) } ``` - Open `frontend/src/App.svelte` and delete all lines. - Delete the `frontend/src/assets/images/logo-universal.png` file ### Creating our application Now let's add our new Go code. Add the following struct declarations to `app.go` before the function definitions: ```go type RandomImage struct { Message string Status string } type AllBreeds struct { Message map[string]map[string][]string Status string } type ImagesByBreed struct { Message []string Status string } ``` Add the following functions to `app.go` (perhaps after the existing function definitions): ```go func (a *App) GetRandomImageUrl() string { response, err := http.Get("https://dog.ceo/api/breeds/image/random") if err != nil { log.Fatal(err) } responseData, err := ioutil.ReadAll(response.Body) if err != nil { log.Fatal(err) } var data RandomImage json.Unmarshal(responseData, &data) return data.Message } func (a *App) GetBreedList() []string { var breeds []string response, err := http.Get("https://dog.ceo/api/breeds/list/all") if err != nil { log.Fatal(err) } responseData, err := ioutil.ReadAll(response.Body) if err != nil { log.Fatal(err) } var data AllBreeds json.Unmarshal(responseData, &data) for k := range data.Message { breeds = append(breeds, k) } sort.Strings(breeds) return breeds } func (a *App) GetImageUrlsByBreed(breed string) []string { url := fmt.Sprintf("%s%s%s%s", "https://dog.ceo/api/", "breed/", breed, "/images") response, err := http.Get(url) if err != nil { log.Fatal(err) } responseData, err := ioutil.ReadAll(response.Body) if err != nil { log.Fatal(err) } var data ImagesByBreed json.Unmarshal(responseData, &data) return data.Message } ``` Modify the `import` section of `app.go` to look like this: ```go import ( "context" "fmt" "encoding/json" "io/ioutil" "log" "net/http" "sort" ) ``` Add the following lines to `frontend/src/App.svelte`: ```html

Dogs API

Click on down arrow to select a breed

{#if showRandomPhoto} No dog found {/if} {#if showBreedPhotos} {#each photos as photo} No dog found {/each} {/if} ``` ### Testing the application To generate the bindings and test the application, run `wails dev`. ### Compiling the application To compile the application to a single, production grade binary, run `wails build`.