No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

Adquiere por un a帽o todos los cursos, escuelas y certificados por un precio especial.

Antes: $249

Currency
$219/a帽o

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Comprar ahora

Termina en:

2D
0H
32M
29S

Manejando POST

37/42
Recursos

Aportes 19

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Siento que hay mucha confusion y desorden de c贸digo y metodologia en este curso.

  • Se ponen cosas en orden distincto, cuando se deberia de guardar la misma nomenclatura por claridad del c贸digo
    si el map es [path][method] entonces todo deberia de estar en este orden , en los metodos, en la asignacion, etc.
  • No es necesario hacer el doble check en FindHandler, si al primer test no existe entonces ya se puede regresar la no-existencia del handler sobre el path

Una herramienta similar a Postman pero mas sencilla es Insomnia!

Hola solo a modo de comentario, por alguna razon el visual studio code me sugeria la funcion 鈥渉ttp.HandleFunc鈥 en vez de la correcta 鈥渉ttp.Handlerfunc鈥, con lo cual me trajo mas de un dolor de cabeza hasta que me di cuenta!

En lugar de poner GET y POST hardcoded, pueden usar las constantes http.MethodGet y http.MethodPost, solo por fina coqueter铆a 馃槂

func main() {
	server := NewServer(":3000")
	server.Handle(http.MethodGet, "/", HandleRoot)
	server.Handle(http.MethodPost, "/api", server.AddMiddleware(HandleHome, CheckAuth(), Logging()))
	server.Listen()
}

Si te da el error:
panic: assignment to entry in nil map
en la funcion Handle

corrige:

s.router.rules[path][method] = handler

por:

s.router.rules[path] = make(map[string]http.HandlerFunc)
s.router.rules[path][method] = handler

de tal maera que te quede asi:

func (s *Server) Handle(method string, path string, handler http.HandlerFunc) {
	s.router.rules[path] = make(map[string]http.HandlerFunc)
	s.router.rules[path][method] = handler
}

El status http MethodNotAllowed indica que la URL si est谩 definida en el router para ser manejada, pero no a trav茅s del m茅todo que se est谩 llamando

Veo comentarios de personas que han olvidado el primer principio para aprender cosas nuevas, 鈥渙lvida lo que ya sabes, viniste a aprender鈥

Una peque帽a observaci贸n es que en el Main cuando se asignan los handlerFunctions, Nestor env铆a primero el m茅todo, luego la ruta lo que nos puede hacer pensar que el mapa seria algo as铆:

map[method][path]handlerfunction

Pero esto estar铆a mal por que quiere decir que solo puede existir un m茅todo GET o un m茅todo POST en nuestra API, es por esto que en realidad el mapa que implementa Nestor es:

map[path][method]handlerfunction

Que tiene mucho mas sentido ya que es verdad que una ruta solo puede existir una vez pero podr铆a obtener varios m茅todos http, sin embargo para no confundirnos es recomendable pedir en el m茅todo Handle primero el Path y luego el Method:

func (server *Server) Handle(path string, method string, handler http.HandlerFunc) {
	...
}

Para que en el Main se pueda escribir la convensi贸n del mapa en el orden correcto:

server.Handle("/", "GET", HandleRoot)

comando para hacer post sin postman

curl -X POST -d "" http://localhost:3000/home

https://dev.to/bmf_san/dive-to-clean-architecture-with-golang-cd4 Esto es de gran ayuda para tener su codigo mas limpio y mejor estructurado, seria Genial que platizi pueda hacer un curso usando de esto y tal vez del framework Echo

Creo que una forma m谩s f谩cil de manejar los verbos de peticiones es al nivel del Handler para no tener que estar modificando el router tanto.

Por ejemplo,

switch request.Method {
    case "GET":     
         // L贸gica para GET
    case "POST":
        // L贸gica para POST
    default:
        // M茅todo no soportado
}

Otra herramienta muy genial para los usuarios de Linux es cURL, personalmente me gusta mucho m谩s que PostMan, incluso hay un video de otro curso que explica c贸mo usarlo: https://platzi.com/clases/1039-terminal-2016/4794-curl/

Ejemplos usando curl:

curl -X POST -d "" http://localhost:3000/home

curl -X POST -d "" http://localhost:3000/api
curl -X GET -d "" http://localhost:3000/api

curl -X GETT -d "" http://localhost:3000/
curl -X GET -d "" http://localhost:3000/

No ser铆a m谩s eficaz hacer la busqueda por metodo

map[metodo][path]?

para reportar que el enlace del curso de postman no funciona

Este es un gran framework para manejar rutas y middleware y algunas cosillas mas https://echo.labstack.com/middleware/

// Asioca un handler con una ruta
func (s *Server) Handle(method string, path string, handler http.HandlerFunc) {

	_, exist := s.router.rules[path]

	if !exist {
		s.router.rules[path] = make(map[string]http.HandlerFunc)
	}

	s.router.rules[path][method] = handler
}

Con Echo Framework podemos hacer varias cositas como el Router, Middleware y dem谩s. Para que le echen un ojo https://echo.labstack.com/