Mudanças entre as edições de "Go: RESTful - manipulando uma array"
(Criou página com 'Afluentes: Sistemas Distribuídos e Mobile <syntaxhighlight lang=go> package main import ( "encoding/json" "fmt" "net/http" "slices" "strconv" ) func main() { vet...') |
|||
(5 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 18: | Linha 25: | ||
router.HandleFunc("GET /strings", func(w http.ResponseWriter, r *http.Request) { | router.HandleFunc("GET /strings", func(w http.ResponseWriter, r *http.Request) { | ||
− | + | json.NewEncoder(w).Encode(vet) | |
− | |||
− | |||
− | |||
− | |||
− | |||
}) | }) | ||
Linha 55: | Linha 57: | ||
}) | }) | ||
− | if err := http.ListenAndServe("localhost:8080", | + | 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 oDELETE
. Em tempo, o exemplo acima não usa o métodoPUT
. Para esse exercício adicione o métodoPUT
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.