No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

15 Días
1 Hrs
0 Min
45 Seg

Manejando POST

37/42
Recursos

Aportes 19

Preguntas 4

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

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 “http.HandleFunc” en vez de la correcta “http.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, “olvida 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/