Mudanças entre as edições de "Go: RESTful - manipulando uma array"

De Aulas
 
(4 revisões intermediárias pelo mesmo usuário não estão sendo mostradas)
Linha 1: Linha 1:
 +
 
Afluentes: [[Sistemas Distribuídos e Mobile]]
 
Afluentes: [[Sistemas Distribuídos e Mobile]]
  
<syntaxhighlight lang=go>
+
= Manipulando uma Array =
 +
 
 +
Nesse exemplo, estamos manipulando uma array chamada <code>vet</code> através dos métodos POST e DELETE, e conseguimos retornar as informações dessa array por meio do método GET, com e sem parâmetro.
 +
 
 +
<syntaxhighlight lang="go">
 
package main
 
package main
  
Linha 10: Linha 15:
 
"slices"
 
"slices"
 
"strconv"
 
"strconv"
 +
 +
"github.com/rs/cors"
 
)
 
)
  
Linha 50: Linha 57:
 
})
 
})
  
if err := http.ListenAndServe("localhost:8080", router); err != nil {
+
c := cors.AllowAll()
 +
r := c.Handler(router)
 +
 
 +
if err := http.ListenAndServe("localhost:8080", r); err != nil {
 
fmt.Println(err.Error())
 
fmt.Println(err.Error())
 
}
 
}
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== Método POST ==
 +
 +
Com o método <code>POST</code> enviamos um conjunto de strings para serem adicionadas ao nosso vetor. Esse conjunto de strings é enviado no formato de uma array JSON. Usando o Postman, podemos testar da seguinte forma:
 +
 +
'''Chamada:'''
 +
 +
POST http://localhost:8080/strings
 +
 +
'''Corpo (''Body'') da mensagem (exemplo):
 +
 +
[ "Florianópolis", "São José", "Palhoça" ]
 +
 +
Dessa forma, essas três strings serão adicionadas no vetor no servidor. Lembrando que nesse exemplo, o vetor é apenas uma variável não persistente. Ao reiniciar o servidor essas informações são perdidas.
 +
 +
Podem ser adicionadas quantas strings forem necessárias a cada chamada do método <code>POST</code>
 +
 +
== Método DELETE ==
 +
 +
O método <code>DELETE</code> nesse exemplo exclui uma string na posição <var>n</var> caso essa posição esteja na array. Sua chamada segue da seguinte forma:
 +
 +
DELETE http://localhost:8080/strings/1
 +
 +
Nesse caso, estamos excluindo a string na posição 1 da array (2a posição).
 +
 +
== Método GET sem parâmetro ==
 +
 +
Esse método retorna todas as strings do servidor na forma de uma array JSON. Segue um exemplo de chamada e retorno:
 +
 +
'''Chamada:'''
 +
 +
GET http://localhost:8080/strings
 +
 +
'''Retorno:'''
 +
 +
[ "Florianópolis", "São José", "Palhoça", "Biguaçu" ]
 +
 +
== Método GET com parâmetro ==
 +
 +
Caso queira retornar uma string em uma posição específica, passamos um parâmetro no método <code>GET</code>. Por exemplo:
 +
 +
'''Chamada:'''
 +
 +
GET http://localhost:8080/strings/2
 +
 +
'''Retorno:'''
 +
 +
Palhoça
 +
 +
retornando apenas a string naquela posição.
 +
 +
= Atividade =
 +
 +
* A linguagem Go, assim como várias linguagens, além de tratamento de arrays, ela tem tratamento de '''MAPs'''. Os MAPs são arrays com o conjunto CHAVE + VALOR. Dessa forma, baseado no exemplo apresentado, faça um serviço que gerencie um MAP. Quando usar o método <code>GET</code> com parâmetro, busque pela CHAVE, e também exclua pela CHAVE usando o <code>DELETE</code>. Em tempo, o exemplo acima não usa o método <code>PUT</code>. Para esse exercício adicione o método <code>PUT</code> para alterar o VALOR de determinada CHAVE (envie um objeto JSON com chave e valor no corpo da mensagem PUT). Em resumo:
 +
** Fazer um serviço usando MAP.
 +
** Adicione o método PUT.
 +
** Pesquise, exclua e altere o valor pela chave.

Edição atual tal como às 19h45min de 9 de outubro de 2024

Afluentes: Sistemas Distribuídos e Mobile

Manipulando uma Array

Nesse exemplo, estamos manipulando uma array chamada vet através dos métodos POST e DELETE, e conseguimos retornar as informações dessa array por meio do método GET, com e sem parâmetro.

package main

import (
	"encoding/json"
	"fmt"
	"net/http"
	"slices"
	"strconv"

	"github.com/rs/cors"
)

func main() {
	vet := make([]string, 0)

	router := http.NewServeMux()

	router.HandleFunc("GET /strings", func(w http.ResponseWriter, r *http.Request) {
		json.NewEncoder(w).Encode(vet)
	})

	router.HandleFunc("GET /strings/{index}", func(w http.ResponseWriter, r *http.Request) {
		index, err := strconv.Atoi(r.PathValue("index"))
		if err != nil || index >= len(vet) {
			fmt.Fprintf(w, "max position is %d", len(vet)-1)
			return
		}
		out := vet[index]
		fmt.Fprintf(w, "%s", out)
	})

	router.HandleFunc("POST /strings", func(w http.ResponseWriter, r *http.Request) {
		strvet := make([]string, 0)
		err := json.NewDecoder(r.Body).Decode(&strvet)
		if err != nil {
			http.Error(w, err.Error(), http.StatusInternalServerError)
			return
		}
		vet = slices.Concat(vet, strvet)
	})

	router.HandleFunc("DELETE /strings/{index}", func(w http.ResponseWriter, r *http.Request) {
		index, err := strconv.Atoi(r.PathValue("index"))
		if err != nil || index >= len(vet) {
			fmt.Fprintf(w, "wrong position %d", len(vet)-1)
			return
		}
		vet = append(vet[:index], vet[index+1:]...)
	})

	c := cors.AllowAll()
	r := c.Handler(router)

	if err := http.ListenAndServe("localhost:8080", r); err != nil {
		fmt.Println(err.Error())
	}
}

Método POST

Com o método POST enviamos um conjunto de strings para serem adicionadas ao nosso vetor. Esse conjunto de strings é enviado no formato de uma array JSON. Usando o Postman, podemos testar da seguinte forma:

Chamada:

POST http://localhost:8080/strings

Corpo (Body) da mensagem (exemplo):

[ "Florianópolis", "São José", "Palhoça" ]

Dessa forma, essas três strings serão adicionadas no vetor no servidor. Lembrando que nesse exemplo, o vetor é apenas uma variável não persistente. Ao reiniciar o servidor essas informações são perdidas.

Podem ser adicionadas quantas strings forem necessárias a cada chamada do método POST

Método DELETE

O método DELETE nesse exemplo exclui uma string na posição n caso essa posição esteja na array. Sua chamada segue da seguinte forma:

DELETE http://localhost:8080/strings/1

Nesse caso, estamos excluindo a string na posição 1 da array (2a posição).

Método GET sem parâmetro

Esse método retorna todas as strings do servidor na forma de uma array JSON. Segue um exemplo de chamada e retorno:

Chamada:

GET http://localhost:8080/strings

Retorno:

[ "Florianópolis", "São José", "Palhoça", "Biguaçu" ]

Método GET com parâmetro

Caso queira retornar uma string em uma posição específica, passamos um parâmetro no método GET. Por exemplo:

Chamada:

GET http://localhost:8080/strings/2

Retorno:

Palhoça

retornando apenas a string naquela posição.

Atividade

  • A linguagem Go, assim como várias linguagens, além de tratamento de arrays, ela tem tratamento de MAPs. Os MAPs são arrays com o conjunto CHAVE + VALOR. Dessa forma, baseado no exemplo apresentado, faça um serviço que gerencie um MAP. Quando usar o método GET com parâmetro, busque pela CHAVE, e também exclua pela CHAVE usando o DELETE. Em tempo, o exemplo acima não usa o método PUT. Para esse exercício adicione o método PUT para alterar o VALOR de determinada CHAVE (envie um objeto JSON com chave e valor no corpo da mensagem PUT). Em resumo:
    • Fazer um serviço usando MAP.
    • Adicione o método PUT.
    • Pesquise, exclua e altere o valor pela chave.