Giter VIP home page Giter VIP logo

Comments (11)

savsgio avatar savsgio commented on June 15, 2024 5

Hi @Dot-H and @toby3d,

I will implement it soon.

Thanks for your advise!

from router.

savsgio avatar savsgio commented on June 15, 2024 4

Hi @toby3d @Dot-H,

I've just released v1.1.0 😉

Please, check: https://pkg.go.dev/github.com/fasthttp/router?tab=doc#Router.ANY

from router.

savsgio avatar savsgio commented on June 15, 2024 1

I'm working on it!

from router.

toby3d avatar toby3d commented on June 15, 2024

I think it would be nice to add a separate method to add a route that can accept any methods at the specified address, like

r.HandleAny("/route/path", func(ctx *fasthttp.RequestCtx) { ... })

from router.

savsgio avatar savsgio commented on June 15, 2024

Hi @Dot-H and @toby3d,

Why do you need to handle any method from one handler?? When I say any method, i mean unknown methods. That could generate unexpected behaviours and maybe sometimes need to check if the http method is valid.

r.HandleAny("/route/path", func(ctx *fasthttp.RequestCtx) { ... })

This route should accept GET, POST, ... , UNICORN, MYCUSTOMETHOD, etc

The following request returns an status code and other things:

curl -X GET http://example.com/route/path --> 200
curl -X POST http://example.com/route/path --> 200
curl -X UNICORN http://example.com/route/path --> This is valid??? Are you prepare to expect that?

Maybe if you need to authenticate the request you could wrap your handlers (like a middleware) and validate.

Or if you want to handle some methods for the same handler you could do:

validMethods := []string{"GET", "POST", "UNICORN"}
handler := func(ctx *fasthttp.RequestCtx) { ... }

for _, method := range validMethods {
   router.Handle(method, "/some/path", handler)
}

I don't sure to add a wildcard method in the router, because like i said, it could generate unexpected behaviours and errors. So you must need to know what HTTP methods are expected, therefore a dirty code.

from router.

toby3d avatar toby3d commented on June 15, 2024

@savsgio The Server structure in fasthttp package contains the Handler field, which does not validate methods by accepting any requests.

I expect that I will not have to juggle either router.Router{...}.Handler or fasthttp.RequestHandler in fasthttp.Server{ Handler: ... } to accept the prescribed methods in some router.Router routes along with routes where the method is not important to me.

from router.

savsgio avatar savsgio commented on June 15, 2024

So if if the method it's not important for you, the routes are important or always will you use a wild path (/path/{any:*})??

I ask you, because if it's true. Use fasthttp without the router is the best option. (In your case)

from router.

savsgio avatar savsgio commented on June 15, 2024

@savsgio The Server structure in fasthttp package contains the Handler field, which does not validate methods by accepting any requests.

I expect that I will not have to juggle either router.Router{...}.Handler or fasthttp.RequestHandler in fasthttp.Server{ Handler: ... } to accept the prescribed methods in some router.Router routes along with routes where the method is not important to me.

It's a good point for add the wild method

from router.

toby3d avatar toby3d commented on June 15, 2024

So if if the method it's not important for you, the routes are important or always will you use a wild path (/path/{any:*})??

I ask you, because if it's true. Use fasthttp without the router is the best option. (In your case)

For example, I want to use routes for Rest API and for websocket connection:

r := router.New()
r.GET("/users", getAllUsers)
r.GET("/users/{id:[0-9]+}", getSingleUser)
r.POST("/users", createUser)
r.DELETE("/users/{id:[0-9]+}", removeUser)

// NOTE: I don't care about methods, because WebSocket
r.HandleAny("/ws", handleWebSocketActions)
// or, if you just change behaviour for Handle function:
r.Handle("{method:*}", "/ws", handleWebSocketActions)

s := new(fasthttp.Server)
s.Handler = r.Handler

Why WebSocket handler use HandleAny? Because if I use GET route for this, then I always get Switch Protocols in logs.

from router.

savsgio avatar savsgio commented on June 15, 2024

Why WebSocket handler use HandleAny? Because if I use GET route for this, then I always get Switch Protocols in logs.

And why not? The websocket connection only works if method is GET, if not the returned code should be MethodNotAllowed -> 405

from router.

toby3d avatar toby3d commented on June 15, 2024

And why not? The websocket connection only works if method is GET, if not the returned code should be MethodNotAllowed -> 405

Suppose I did not choose the most obvious example, but instead of WebSocket, you can take any other HTTP protocol that does not require specific methods or requires a range of them. In any case, the router does not yet support the addition of routes without a rigid binding to methods.

from router.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.