Your SlideShare is downloading. ×
Mojolicious and REST
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Mojolicious and REST

1,254

Published on

Lessons learning from implementing a RESTful interface using Mojolicious

Lessons learning from implementing a RESTful interface using Mojolicious

Published in: Technology
1 Comment
4 Likes
Statistics
Notes
No Downloads
Views
Total Views
1,254
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
7
Comments
1
Likes
4
Embeds 0
No embeds

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))

×