Mojolicious and REST
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Mojolicious and REST

  • 1,572 views
Uploaded on

Lessons learning from implementing a RESTful interface using Mojolicious

Lessons learning from implementing a RESTful interface using Mojolicious

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
No Downloads

Views

Total Views
1,572
On Slideshare
1,570
From Embeds
2
Number of Embeds
2

Actions

Shares
Downloads
6
Comments
1
Likes
4

Embeds 2

http://lanyrd.com 1
https://twitter.com 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Mojolicious and REST Building a RESTful interface using Mojolicious By @jonasbn for Nordic Perl Workshop 2013
  • 2. - $authbridge->route(‘/domain/is_available/:domainname') + $authbridge->route(‘/domain/is_available/#domainname')
  • 3. • Implementing REST using Mojolicious is easy • very easy • too easy
  • 4. but!
  • 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
  • 7. so?
  • 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
  • 9. code?
  • 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))