GithubHelp home page GithubHelp logo

Comments (5)

raphael avatar raphael commented on June 3, 2024 1

That's fair, it does set the expectation. I guess the one place where that might matter is in the generated OpenAPI specification. I'm reopening the issue so we can add this feature.

from goa.

raphael avatar raphael commented on June 3, 2024

Just a note that there is indeed a bug in that Goa should never panic. That being said the correct DSL here would be:

var _ = Service("products", func() {
	Description("The product service provides an API for managing products.")
	HTTP(func() {
		Path("/products")
	})

	// update product by id
	Method("update by id", func() {
		Payload(UpdateProductPayload)
		Result(UpdateProductPayload, func() {
			View("default")
		})
		Error("no_criteria", String, "Missing criteria")
		Error("no_match", String, "No product found with specified id")
		HTTP(func() {
			POST("/{id}")
			Response(StatusOK)
			Response("no_criteria", StatusBadRequest)
			Response("no_match", StatusNotFound)
		})
	})
})

Param defines query string parameters so in the original DSL the id field gets mapped twice - once in the HTTP route and once as a query string parameter. So Param should be removed and instead the mapping done within the route definition (POST("/{id}")).

from goa.

Makirchn avatar Makirchn commented on June 3, 2024

So as I understand your answer, it is not possible to map a path param element name to an attribute name like it is possible for query, header or body elements?

from goa.

raphael avatar raphael commented on June 3, 2024

Yes you are correct, the name of the path param needs to match the name of the attribute. The idea is that the name of the path params should not affect how clients build requests. I am curious to understand the use case for wanting to use a different name for the path param than the name of the attribute?

from goa.

Makirchn avatar Makirchn commented on June 3, 2024

I saw the http element mapping of header, body and query elements on https://goa.design/design/http_mapping/ and simply tried to use it with path parameters. My intention was to use a speaking route like /users/{user_id}/products/{product_id} instead of using /users/{id}/products/{product_id} while having a consistent schema for my structs by having them all have an id parameter regardless of whether it is a user, product or is something else.

from goa.

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.