A煤n no tienes acceso a esta clase

Crea una cuenta y contin煤a viendo este curso

Manejando POST

37/42
Recursos

Aportes 15

Preguntas 4

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad? Crea una cuenta 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!

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
}

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)

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

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/

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()
}

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

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

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

map[metodo][path]?

// 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
}

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
}

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