Index: /trunk/BookmarkApp.pm
===================================================================
--- /trunk/BookmarkApp.pm	(revision 6)
+++ /trunk/BookmarkApp.pm	(revision 7)
@@ -11,8 +11,16 @@
 use Bookmarks;
 
+use URI;
+my $base_uri = URI->new;
+$base_uri->scheme('http');
+$base_uri->host($ENV{SERVER_NAME});
+$base_uri->port($ENV{SERVER_PORT});
+$base_uri->path($ENV{SCRIPT_NAME} . '/');
+
 my $dbname = 'new.db';
 my $dbh = DBI->connect("dbi:SQLite:dbname=$dbname", "", "", { RaiseError => 1 });
 my $bookmarks = Bookmarks->new({
     dbh => $dbh,
+    base_uri => $base_uri,
 });
 
@@ -72,5 +80,5 @@
         return decode_utf8(
             encode_json({
-                resources => \@resources,
+                bookmarks => \@resources,
             })
         );
@@ -102,4 +110,5 @@
     my $id = $self->param('id');
     my $field = $self->param('field');
+    my $format = $self->query->param('format') || 'html';
 
     my $bookmark = $bookmarks->get_bookmark({ id => $id });
@@ -114,16 +123,24 @@
             return ref $value eq 'ARRAY' ? join(',', @{ $value }) : $value;
         } else {
-            # display the bookmark form for this bookmark
-            $bookmark->{exists} = 1;
-            $bookmark->{created} = "Created " . localtime($bookmark->{ctime});
-            $bookmark->{created} .= '; Updated ' . localtime($bookmark->{mtime}) unless $bookmark->{ctime} == $bookmark->{mtime};
-            $self->header_props(
-                -type    => 'text/html',
-                -charset => 'UTF-8',
-            );
-            return $self->tt_process(
-                'bookmark.tt',
-                $bookmark,
-            );
+            if ($format eq 'json') {
+                $self->header_props(
+                    -type    => 'application/json',
+                    -charset => 'UTF-8',
+                );
+                return decode_utf8(encode_json($bookmark));
+            } else {
+                # display the bookmark form for this bookmark
+                $bookmark->{exists} = 1;
+                $bookmark->{created} = "Created " . localtime($bookmark->{ctime});
+                $bookmark->{created} .= '; Updated ' . localtime($bookmark->{mtime}) unless $bookmark->{ctime} == $bookmark->{mtime};
+                $self->header_props(
+                    -type    => 'text/html',
+                    -charset => 'UTF-8',
+                );
+                return $self->tt_process(
+                    'bookmark.tt',
+                    $bookmark,
+                );
+            }
         }
     } else {
Index: /trunk/Bookmarks.pm
===================================================================
--- /trunk/Bookmarks.pm	(revision 6)
+++ /trunk/Bookmarks.pm	(revision 7)
@@ -4,5 +4,6 @@
 use Bookmark;
 
-has dbh => ( is => 'ro');
+has dbh      => ( is => 'ro' );
+has base_uri => ( is => 'ro' );
 
 sub get_bookmark {
@@ -24,4 +25,7 @@
         $sth_tag->execute($bookmark->{uri});
         $bookmark->{tags} = [ map { $$_[0] } @{ $sth_tag->fetchall_arrayref } ];
+        if ($self->base_uri) {
+            $bookmark->{bookmark_uri} = $self->base_uri . $bookmark->{id};
+        }
     }
     return $bookmark;
@@ -46,4 +50,7 @@
         $sth_tag->execute($resource->{uri});
         $resource->{tags} = [ map { $$_[0] } @{ $sth_tag->fetchall_arrayref } ];
+        if ($self->base_uri) {
+            $resource->{bookmark_uri} = $self->base_uri . $resource->{id};
+        }
         push @resources, $resource;
     }
