---
name: "Jifty::Manual::TutorialRest"
section: "3pm"
platform: "linux"
package: "libjifty-perl"
version: "1.10518+dfsg-2"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/Jifty::Manual::TutorialRest"
---

# Jifty::Manual::TutorialRest(3pm)

Web Services

## NAME

Jifty::Manual::TutorialRest - Web Services

## DESCRIPTION

This builds on Jifty::Manual::Tutorial, so make sure you have a running jifty that roughly resembles the step-by-step from there.

## SETUP

You must add this to your site\_config.yml

```
  framework:
    Plugins:
      - REST: {}
```

See Jifty::Plugin::REST.

The commands assume that you have LWP installed with the GET alias.  If not, you'll need to use the longhand lwp-request -m GET, or curl, or your browser.

## help

Make sure it is working:

```
  $ GET http://localhost:8888/=/help
  Accessing resources:
  ...
```

You should see some text describing the services, not html (that's longhand for 404.)  Check the config and restart the server.

## GET

Just list the models.

```
  $ GET http://localhost:8888/=/model.yml
  ---
  - MyWeblog.Model.Post
```

List the Post schema.

```
  $ GET http://localhost:8888/=/model/Post.yml
  ---
  body:
    label: Content
    name: body
    readable: 1
    sort_order: 1
    type: text
    writable: 1
  id:
    mandatory: 1
    name: id
    readable: 1
    type: serial
    writable: 0
  title:
    default: Untitled post
    label: Title
    name: title
    readable: 1
    sort_order: 0
    type: text
    writable: 1
```

You did make some posts, right?

```
  $ GET http://localhost:8888/=/model/Post/id.yml
  ---
  - 1
  - 2
```

Dump the data:

```
  $ GET http://localhost:8888/=/model/Post/id/1.yml
  ---
  body: 'This is my post, the content of which is this, which is mine.'
  id: 1
  title: my first post
  $ GET http://localhost:8888/=/model/Post/id/2.yml
  ---
  body: "Content of another post.  Got to go, the cat's on fire."
  id: 2
  title: post deux
```

## POST

TODO not working

Actually, it looks like it is not supposed to work this way.  Why not?

```
  $ echo '---
  body: "A post via web services"
  id: 3
  title: "posting from the command-line"
  ' | lwp-request -m POST http://localhost:8888/=/model/Post.yml
  POST http://localhost:8888/=/model/Post/id/3.yml --> 404 Not Found
```

## PUT

TODO not working

```
  $ echo '---
  title: "posting from the cli"
  ' | lwp-request -m PUT http://localhost:8888/=/model/Post/3.yml
  500 Can't read entity body: Connection reset by peer
```

## DELETE

```
  $  lwp-request -m DELETE http://localhost:8888/=/model/Post/id/3.yml
  ---
  content: {}
  error: ~
  field_errors: {}
  field_warnings: {}
  message: Deleted
  success: 1
```
