W3C home > Mailing lists > Public > public-webid@w3.org > September 2012

njh.me - content negotiation in PHP

From: Nicholas Humfrey <nicholas.humfrey@bbc.co.uk>
Date: Fri, 7 Sep 2012 12:14:52 +0100
To: <public-webid@w3.org>
Message-ID: <CC6F95BC.80909%nicholas.humfrey@bbc.co.uk>
Hello,

Apologies for a bit a shameless self-promotion but I think it might be of
interest to this group.

I was recently looking at my WebID:
http://www.aelius.com/njh#me

And realised that I could have this instead and save a few bytes ;-)
http://njh.me/

So I bought njh.me and I am now using it as the identifier for me, while
keeping my homepage at http://www.aelius.com/njh/



Doing content negotiation properly is still badly supported by most
languages and environments. I wanted to use a lightweight MVC framework and
chose Slim. Slim has had content negotiation on its backlog for quite a long
time but I decided that if I wanted to get it working any time soon, I was
going to have to implement it myself.

My fork is here:
https://github.com/njh/Slim/tree/negotiation

And there is a pull request to bring it into master here:
https://github.com/codeguy/Slim/pull/376


The negotiation API is very simple and allows you to do this:
$format = $app->respondTo('html', 'rdf', 'ttl', 'json');

The list of suffixes is the file formats that are supported by the
application. They are ordered by the server's preference of format. The
client can either use an Accept header to select the desired format or force
a specific format by appending a suffix to the URL, for example:

http://njh.me/foaf.rdf

If you make a request with no Accept header and no suffix, then the first
format in the list will be returned (HTML). The client can use q values to
rank its preferred format.


The Slim application for njh.me is only 32 lines long and it hopefully very
easy to read:
https://github.com/njh/njh.me/blob/master/public/index.php

It depends upon Composer, Slim and EasyRdf. There are some PHPUnit tests to
ensure the it behaves correctly.

Web browsers requesting http://njh.me/ will be redirected, using a 303 to my
homepage. A Semweb clients setting a Accept: application/rdf+xml will be
sent a 303 redirect to http://njh.me/foaf.rdf, which in turn will return
RDF/XML. 


Hopefully this is a pattern that people can re-use and apply to more complex
examples. 


nick.


http://www.bbc.co.uk/
This e-mail (and any attachments) is confidential and may contain personal views which are not the views of the BBC unless specifically stated.
If you have received it in error, please delete it from your system.
Do not use, copy or disclose the information in any way nor act in reliance on it and notify the sender immediately.
Please note that the BBC monitors e-mails sent or received.
Further communication will signify your consent to this.
					
Received on Friday, 7 September 2012 11:15:30 UTC

This archive was generated by hypermail 2.3.1 : Sunday, 31 March 2013 14:40:59 UTC