Slide 1

Slide 1 text

Ben Ramsey • International PHP Conference • 11 Oct 2010 Introduction to AtomPub Web Services

Slide 2

Slide 2 text

Introduction to AtomPub Web Services • Ben Ramsey Hi, I’m Ben. ‣VP of Engineering at Moontoast ‣Co-founder and organizer emeritus of the Atlanta PHP user group ‣Current organizer of the Nashville PHP user group ‣I blog at benramsey.com ‣I tweet at @ramsey ‣Please rate this presentation: http://joind.in/2185 2

Slide 3

Slide 3 text

Atom & AtomPub?


Slide 4

Slide 4 text

What’s the difference?


Slide 5

Slide 5 text

Introduction to AtomPub Web Services • Ben Ramsey Atom: RFC 4287 5

Slide 6

Slide 6 text

Atom is an XML-based document format that describes lists of related information known as “feeds”. Feeds are composed of a number of items, known as “entries”, each with an extensible set of attached metadata. For example, each entry has a title. The primary use case that Atom addresses is the syndication of Web content such as weblogs and news headlines to Web sites as well as directly to user agents. —RFC 4287, §1

Slide 7

Slide 7 text

Atom is an XML language.

Slide 8

Slide 8 text

Introduction to AtomPub Web Services • Ben Ramsey AtomPub: RFC 5023 8

Slide 9

Slide 9 text

The Atom Publishing Protocol is an application-level protocol for publishing and editing Web Resources using HTTP and XML 1.0. The protocol supports the creation of Web Resources and provides facilities for: Collections: Sets of Resources, which can be retrieved in whole or in part. Services: Discovery and description of Collections. Editing: Creating, editing, and deleting Resources. The Atom Publishing Protocol is different from many contemporary protocols in that the server is given wide latitude in processing requests from clients. —RFC 5023, §1

Slide 10

Slide 10 text

AtomPub is a  publishing protocol.

Slide 11

Slide 11 text

Introduction to AtomPub Web Services • Ben Ramsey What about RSS? 11

Slide 12

Slide 12 text

Introduction to AtomPub Web Services • Ben Ramsey Content Types 12 ‣RSS allows only for plain text and escaped HTML content types ‣Atom provides for plain text, escaped HTML, XHTML, XML, and Base64-encoded binary data

Slide 13

Slide 13 text

Introduction to AtomPub Web Services • Ben Ramsey Internationalization ‣RSS may have a language set for a feed, but doesn’t have a way to indicate language for items in the feed ‣Atom uses the xml:lang attribute to specify language on a per-element basis ‣Atom uses IRIs, which allow the usage of characters in identifiers outside of ASCII 13

Slide 14

Slide 14 text

Introduction to AtomPub Web Services • Ben Ramsey Modularity ‣RSS vocabulary elements aren’t reusable in other XML vocabularies ‣Atom was designed to allow its vocabulary to be mixed with other XML vocabularies ‣Namespaces! Atom has one; RSS does not 14

Slide 15

Slide 15 text

Introduction to AtomPub Web Services • Ben Ramsey Other Things ‣RSS has no schema; Atom has a RelaxNG schema ‣RSS defines no mechanism for handling relative URIs; Atom uses xml:base ‣Various implementations in RSS leads to interoperability problems ‣No standard protocol for publishing; RSS is read only 15

Slide 16

Slide 16 text

Atom was created to solve the RSS problems.

Slide 17

Slide 17 text

Introduction to AtomPub Web Services • Ben Ramsey Profile of Atom ‣Atom Syndication Format ‣An XML-based web content and metadata syndication format ‣Defined by IETF RFC 4287 ‣Fixes the “problems” of RSS ‣XML namespace: http://www.w3.org/2005/Atom 17

Slide 18

Slide 18 text

Introduction to AtomPub Web Services • Ben Ramsey Profile of AtomPub ‣Atom Publishing Protocol or APP ‣A protocol for publishing and editing web resources using HTTP and XML ‣Defined by IETF RFC 5023 ‣Uses Atom as it’s XML syntax ‣XML namespace: http://www.w3.org/2007/app 18

Slide 19

Slide 19 text

Introduction to AtomPub Web Services • Ben Ramsey Basics of AtomPub ‣Each resource has a unique identifier ‣The resources are well-connected ‣Resources share the same interface ‣There is no state; requests are atomic ‣Follows a resource-oriented architecture 19

Slide 20

Slide 20 text

Introduction to AtomPub Web Services • Ben Ramsey Terminology ‣Entry ‣Feed/Collection ‣Category Document ‣Service Document 20

Slide 21

Slide 21 text

Introduction to AtomPub Web Services • Ben Ramsey Content Types ‣Entry: 
 application/atom+xml;type=entry ‣Feed/Collection:
 application/atom+xml ‣Category Document:
 application/atomcat+xml ‣Service Document:
 application/atomsvc+xml 21

Slide 22

Slide 22 text

Introduction to AtomPub Web Services • Ben Ramsey Designing an AtomPub Service 22

Slide 23

Slide 23 text

Introduction to AtomPub Web Services • Ben Ramsey What will our service do? 23 ‣Expose users ‣Expose content ‣Allow users to manipulate content

Slide 24

Slide 24 text

Step 1: Define our URIs

Slide 25

Slide 25 text

Introduction to AtomPub Web Services • Ben Ramsey Users ‣/user ‣/user/{username} ‣For example: /user/ramsey 25

Slide 26

Slide 26 text

Introduction to AtomPub Web Services • Ben Ramsey Content ‣/content ‣/content/{id} ‣For example: /content/1234 26

Slide 27

Slide 27 text

Step 2: Define the relationships

Slide 28

Slide 28 text

Introduction to AtomPub Web Services • Ben Ramsey Relationship Building ‣user ⇛ content:
 one to many ‣content ⇛ user:
 one to one 28

Slide 29

Slide 29 text

Step 3: Define the interface

Slide 30

Slide 30 text

Methods GET PUT POST DELETE Cut & Paste Copy Paste Over Paste After Cut

Slide 31

Slide 31 text

Introduction to AtomPub Web Services • Ben Ramsey Actions for User Resources ‣Retrieve user collection:
 GET /user ‣Create a new user:
 POST /user ‣Modify an existing user:
 PUT /user/ramsey ‣Delete a user:
 DELETE /user/ramsey 31

Slide 32

Slide 32 text

Introduction to AtomPub Web Services • Ben Ramsey Actions for Content Resources ‣Retrieve content:
 GET /content ‣Create new content:
 POST /content ‣Modify content:
 PUT /content/1234 ‣Remove content:
 DELETE /content/1234 32

Slide 33

Slide 33 text

Introduction to AtomPub Web Services • Ben Ramsey Other Actions ‣Service discovery:
 GET / ‣Retrieve content for a particular user:
 GET /user/ramsey/content 33

Slide 34

Slide 34 text

Introduction to AtomPub Web Services • Ben Ramsey Let’s see it in action 34

Slide 35

Slide 35 text

GET / HTTP/1.1 Host: atom.example.org HTTP/1.x 200 OK Date: Mon, 21 Sep 2009 16:33:45 GMT Content-Type: application/atomsvc+xml

Slide 36

Slide 36 text

Our Content Store Users application/atom+xml;type=entry Content application/atom+xml;type=entry

Slide 37

Slide 37 text

GET /user HTTP/1.1 Host: atom.example.org HTTP/1.x 200 OK Date: Mon, 21 Sep 2009 16:34:26 GMT Content-Type: application/atom+xml

Slide 38

Slide 38 text

Users 2009-09-21T05:21:19Z tag:example.org,2009-09:user Users application/atom+xml;type=entry ...

Slide 39

Slide 39 text

Introduction to AtomPub Web Services • Ben Ramsey Manipulating a User 39

Slide 40

Slide 40 text

GET /user/ramsey HTTP/1.1 Host: atom.example.org HTTP/1.x 200 OK Date: Mon, 21 Sep 2009 16:34:26 GMT Content-Type: application/atom+xml;type=entry

Slide 41

Slide 41 text

ramsey ramsey tag:example.org,2008:user/ramsey 2009-09-21T13:45:00Z 2008-05-23T16:23:34Z
Ben Ramsey 123-456-7890

Slide 42

Slide 42 text

Introduction to AtomPub Web Services • Ben Ramsey Modify the Entry Locally 42

Slide 43

Slide 43 text

ramsey ramsey tag:example.org,2008:user/ramsey 2009-09-22T09:14:58Z 2008-05-23T16:23:34Z
Ben Ramsey Moontoast 123-456-7890

Slide 44

Slide 44 text

PUT /user/ramsey HTTP/1.1 Host: atom.example.org Content-Type: application/atom+xml;type=entry {body here} HTTP/1.x 200 OK Date: Mon, 22 Sep 2009 09:14:59 GMT Content-Type: application/atom+xml;type=entry

Slide 45

Slide 45 text

Introduction to AtomPub Web Services • Ben Ramsey Add Some Content 45

Slide 46

Slide 46 text

Introduction to AtomPub Web Services • Ben Ramsey First, a Few Notes 46 ‣You need authentication! ‣Perhaps you need encryption ‣You definitely need validation ‣And I’m not going to tell you how

Slide 47

Slide 47 text

That’s out of scope.

Slide 48

Slide 48 text

:-)

Slide 49

Slide 49 text

But I’ll show you the basics.

Slide 50

Slide 50 text

Our Content Store Users application/atom+xml;type=entry Content application/atom+xml;type=entry

Slide 51

Slide 51 text

Introduction to AtomPub Web Services • Ben Ramsey Get the Categories 51

Slide 52

Slide 52 text

GET /cat/content HTTP/1.1 Host: atom.example.org HTTP/1.x 200 OK Date: Mon, 22 Sep 2009 09:39:26 GMT Content-Type: application/atomcat+xml

Slide 53

Slide 53 text

Slide 54

Slide 54 text

Introduction to AtomPub Web Services • Ben Ramsey Create the Entry Document Locally 54

Slide 55

Slide 55 text

Perfect Mark Phelps tag:example.org,2009:content/perfect 2009-09-22T20:12:08Z TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWF IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGl ...

Slide 56

Slide 56 text

POST /content HTTP/1.1 Host: atom.example.org Content-Type: application/atom+xml;type=entry {body here} HTTP/1.x 202 Accepted Date: Mon, 22 Sep 2009 09:14:59 GMT {body contains status indicator}

Slide 57

Slide 57 text

Introduction to AtomPub Web Services • Ben Ramsey Authentication? ‣Atom doesn’t specify a preference ‣WSSE Username Token ‣OAuth ‣Basic authentication ‣Digest authentication ‣??? 57

Slide 58

Slide 58 text

Did I miss anything?

Slide 59

Slide 59 text

Oh, yeah. Where’s the PHP code?

Slide 60

Slide 60 text

Introduction to AtomPub Web Services • Ben Ramsey AtomPub in PHP ‣DOM for reading/writing ‣SimpleXML for reading ‣XMLReader for reading ‣XMLWriter for writing ‣String concatenation for writing ‣I recommend XMLReader/XMLWriter; they’re the fastest at parsing and generating XML 60

Slide 61

Slide 61 text

Introduction to AtomPub Web Services • Ben Ramsey Wrapping Up ‣You can extend Atom with other XML vocabularies (Dublin Core, etc.) ‣XML Digital Signature or XML Encryption may be used, or encrypt as a bag of bits ‣Use your preferred authentication method ‣Use HTTP in a RESTful fashion ‣Use DOM or XMLReader/XMLWriter to parse Atom documents 61

Slide 62

Slide 62 text

Introduction to AtomPub Web Services • Ben Ramsey Questions? ‣I blog at benramsey.com ‣I tweet at @ramsey ‣Please rate this presentation: http://joind.in/2185 ‣Read the Atom specifications:
 RFC 4287
 RFC 5023 ‣My company is Moontoast 62

Slide 63

Slide 63 text

Introduction to AtomPub Web Services Copyright © Ben Ramsey. Some rights reserved. This work is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 United States License. For uses not covered under this license, please contact the author.

Slide 64

Slide 64 text

Introduction to AtomPub Web Services • Ben Ramsey Photo Credits 64 ‣Molecule display, by Christian Guthier ‣Atom, by jayneandd ‣Atomium - detail, by Constantin Barbu ‣Simplicity, by Subterranean Tourist Board ‣STEREO's Extreme UltraViolet Imager (EUVI), by NASA ‣Quantum Universe, by Gaurav ‣Fullerene Nanogears, by NASA ‣Little Atom, by Marrio ‣That Atom, by Albert O’Conner ‣Bokeh Spiral, by Eric Wüstenhagen ‣Chambered Nautilus Shell - detail, by Jitze Couperus