Live data from Hacker News

REST is over

blog.steveklabnik.com

41–48 of 48 posts

Re: REST is over

#42

The point is correct. Page 39 or 40 of the original thesis, if you get the PDF version, says that the goal of the thesis is to provide a mechanism to build hypermedia systems. This usage is key. The system that you make using REST needs to provide all of the "linking" ability within the response. It also assumes (Roy never defined what hypermedia is) that the content type is described somewhere, possibly in some stan…

Why do you say "Hopefully it will not become hypermedia" with respect to JSON? What's wrong with this happening? What are your thoughts on the Collection+JSON hypermedia type presented in Amundsen's book? http://www.amundsen.com/media-types/collection/

Re: REST is over

#43

Earlier quoted context omitted.

See, this is the problem with REST: just when you think you've finally grokked it and are building RESTfully, along comes yet another hurdle hidden behind the others. You're not really RESTful unless you also do X, where X is a seemingly infinite regress of progressively more pure necessary criteria that curve toward an asymptote. Seriously, why is it so hard to develop using a method that is supposed to make buildin…

There are only six constraints to be considered RESTful, and those are reasonably well defined. Anything else is either not really a part of REST (such as having to use all HTTP methods, or having clean URLs) or derived from them. In this case, sending some representation as just JSON (application/json) clearly breaks the Uniform Interface constraint, particularly the HATEOAS principle: a client is supposed to only k…

Is there anything inherently wrong with including a type property on a json response to help with type-marshalling into an object type which both clients and servers mutually understand?

Re: REST is over

#44

Earlier quoted context omitted.

There are only six constraints to be considered RESTful, and those are reasonably well defined. Anything else is either not really a part of REST (such as having to use all HTTP methods, or having clean URLs) or derived from them. In this case, sending some representation as just JSON (application/json) clearly breaks the Uniform Interface constraint, particularly the HATEOAS principle: a client is supposed to only k…

Is there anything inherently wrong with including a type property on a json response to help with type-marshalling into an object type which both clients and servers mutually understand?

I'm assuming "wrong" means unRESTful.

Yes, because the clients have to know that for your service specifically, when they get an "application/json" response, they have to look for that property. That kind of information, unless defined in the standard - in this case, the HTTP or JSON specs - is considered out-of-band information, which breaks the Uniform Interface constraint.

To quote Roy Fielding:

     A REST API should be entered with no prior knowledge beyond the initial
    URI (bookmark) and set of standardized media types that are appropriate
    for the intended audience
Anything besides (URL, mediatypes) is unRESTful.

Of course, I believe you could easily bypass that by making up a single new mediatype (e.g. application/vnd.my-service+json) and then use that for any JSON response with that type property. Since the clients know knew how to distinguish your JSON responses from everybody else's just by their mediatype, it wouldn't break REST.

But on the other hand, if you're using a different mediatype, why not go all the way and just use different mediatypes instead of a type property?

EDIT: As an addendum, the point of this constraint is to reduce coupling and enable the REST clients to be as generic as possible, enabling code reuse and modularity.

Using your example, I could write an application where the core was composed of an HTTP client, with support for plugins that would register themselves as "mediatype handlers". This way, the core could fetch the representation for an URL and then dispatch it to the right handler using the mediatype.

If I wanted to process your API, now my core client would have to include a JSON parser and an hack in the middle of the dispatching code to process all 'application/json' responses looking for your type property. It'd be ugly, bloated (multiple JSON parsing instances), harder to maintain, etc.

Of course, right now we don't see this as a problem because everyone writes a client against a specific API anyway, but frankly I think that's a bug, not a feature. If the REST APIs out there were truly RESTful, I think we'd see much more interesting clients that could combine dozens of different APIs, which is now impossible due to the sheer manpower required.

Re: REST is over

#45
post #41

Earlier quoted context omitted.

Have you read the actual blog post?

Yes sure I read it. But could not get what it means.

It means "Nobody understands REST and it has been so misused that it has lost its usefulness as a term, let's create a new term for the original concept, a term that better reflects what REST really means". That term is Hypermedia APIs.

Re: REST is over

#46

Earlier quoted context omitted.

Is there anything inherently wrong with including a type property on a json response to help with type-marshalling into an object type which both clients and servers mutually understand?

I'm assuming "wrong" means unRESTful. Yes, because the clients have to know that for your service specifically , when they get an "application/json" response, they have to look for that property. That kind of information, unless defined in the standard - in this case, the HTTP or JSON specs - is considered out-of-band information, which breaks the Uniform Interface constraint. To quote Roy Fielding: A REST API should…

While I totally agree with the ideas you've described from an academic point of view, I don't that they adequately consider the human side of consuming APIs.

Yeah, it'd be awesome if we could all consume APIs with standard interfaces using Content-Types, however I don't think the current solution is realistic or even good for innovation.

Having to define a Content-Type like "application/vnd.my-service+json" and submit it to a standards body and then approved like described in Amundsen's book is hardly practical or desirable.

The standards process today sucks (see the CSS prefix debate for a prime example) (and, I'm not claiming I can do better, just making an observation)

The way I see it, defining types in a JSON format to help with type-marshalling until that format is successful and thus merits standardization is far more effective at promoting innovation than starting with submission to a standards body so that everyone can comment on (i.e. bikeshed) about a format until it gains acceptance.

There is a an interesting dynamic between pragmatism and academics, but I think it would be best for the academics to actively move the pragmatics towards the ideal instead of staying in an ivory tower and letting the pragmatics take twice as long to discover the "pure" solution.

RESTish solutions should become RESTful through standardization into a proper media type. Maybe the RESTful solution is derived from the coordinated cooperation of several participants with RESTish solutions.

Acknowledging and adopting the human element is likely to move things forward far faster than a steadfast insistence on being pure. We could probably have far more useful media types if we assumed that formats eventually become a media type once they become popular enough. Pave the cowpaths.

Anyways, not arguing with your comment. I agree with most of what you said and ot was enlightening. Just saying, that it'd be great if people actively considered the fact that human beings are involved when discussing ideas. Ideas are great, but they mean nothing if you can't humans to go along with them.

Re: REST is over

#47

Earlier quoted context omitted.

I'm assuming "wrong" means unRESTful. Yes, because the clients have to know that for your service specifically , when they get an "application/json" response, they have to look for that property. That kind of information, unless defined in the standard - in this case, the HTTP or JSON specs - is considered out-of-band information, which breaks the Uniform Interface constraint. To quote Roy Fielding: A REST API should…

While I totally agree with the ideas you've described from an academic point of view, I don't that they adequately consider the human side of consuming APIs. Yeah, it'd be awesome if we could all consume APIs with standard interfaces using Content-Types, however I don't think the current solution is realistic or even good for innovation. Having to define a Content-Type like "application/vnd.my-service+json" and submi…

Having to define a Content-Type like "application/vnd.my-service+json" and submit it to a standards body and then approved like described in Amundsen's book is hardly practical or desirable.

Yeah, but that's why I chose media types in the Vendor Tree (application/vnd.) as examples - as far as I can tell, they do not need to be registered with IANA. And I'm sure they don't have to be reviewed, even if you do register them:

    public exposure and review of media types to be 
    registered in the vendor tree is not required
For example, Github uses application/vnd.github and I don't think they've ever registered that.

The way I see it, defining types in a JSON format to help with type-marshalling until that format is successful and thus merits standardization is far more effective at promoting innovation than starting with submission to a standards body so that everyone can comment on (i.e. bikeshed) about a format until it gains acceptance.

Sure, but it doesn't have to be a standard to have its own mimetype. Just put it after your company's name (application/vnd.COMPANY.FORMAT) and forget about registration, imho.

Sure, a standard would be better, but this is still way better than having to use an hack like that.

Re: REST is over

#48

Earlier quoted context omitted.

While I totally agree with the ideas you've described from an academic point of view, I don't that they adequately consider the human side of consuming APIs. Yeah, it'd be awesome if we could all consume APIs with standard interfaces using Content-Types, however I don't think the current solution is realistic or even good for innovation. Having to define a Content-Type like "application/vnd.my-service+json" and submi…

Having to define a Content-Type like "application/vnd.my-service+json" and submit it to a standards body and then approved like described in Amundsen's book is hardly practical or desirable. Yeah, but that's why I chose media types in the Vendor Tree (application/vnd.) as examples - as far as I can tell, they do not need to be registered with IANA. And I'm sure they don't have to be reviewed, even if you do register…

Cool beans. I'm still learning more about custom media types at the moment and this is useful info. Thanks.
Post reply on HN