5. Rest in
Practice
Ian Robinson, Jim Webber
and Savas Parastatides
•
On mediatypes, describes an antipattern implemented in Ruby on Rails
6. •
•
•
On mediatypes, describes an
anti-pattern implemented in
Ruby on Rails (RoR)
This pattern has unfortunately
made it to Mojolicious
and that is to have the mediatype communicated on the URL
8. •
The recommended practice is to use Accept
headers to communicate media-types
•
and these can be weighted 8-o
•
We use HTTP status codes to communicate state
and status
•
URLs should be used to communicate intent not
formatting
•
For Mojolicious this required some experimenting
10. $self->respond_to(
json => { status => $status, json => $response },
text => { status => $status, text => $message },
xml => {
status => $status,
text
=> XMLout(
$response,
NoAttr
=> TRUE,
RootName => XML_ROOT,
keyattr => [],
XMLDecl => XML_DECL
)
},
any => {
status => HTTP_UNSUPPORTED_MEDIA_TYPE,
json
=> status_message(HTTP_UNSUPPORTED_MEDIA_TYPE)
},
);
11. Lessons Learned
•
Mojolicious does the right thing when it comes to the
Accept header and actually does it quite well
•
The anti-pattern supported by Mojolicious can be
avoided
•
Use # instead of : in your routes (see the diff) and it will
work
•
But actually ?format=(json|text|xml) is supported but we
only use it for debugging (and it actually has
precedence (and it is undocumented on our side))