# Build Web APIs with Aqueduct #3

In this part we will look at `Serializable` classes and how they enable us to handle the payload of a request body. We will then proceed to set up and integrate our PostgreSQL database.

%[https://youtu.be/sXk9nkdSVq4] 

## **What are Serializable objects?**

These objects are responsible for encoding and decoding the payload of a request. To use one of these, extend the `Serializable` class and override the `asMap()` and `readFromMap()` methods.

The example here creates a `Read` subclass responsible for extracting the `title`, `author` and `year` fields from the request payload as well as returning the same fields in a JSON response.

```dart
class Read extends Serializable {
  String title;
  String author;
  int year;

  @override
  Map<String, dynamic> asMap() => {
    'title': title,
    'author': author,
    'year': year,
  }

  @override
  void readFromMap(Map<String, dynamic> requestBody) {
    title = requestBody['title'] as String;
    author = requestBody['author'] as String;
    year = requestBody['year'] as int;
  }
}
```

So the `asMap()` method takes in the instance members of `Read` and returns a `Map` structure, useful when returning JSON responses.

`readFromMap()` is used when extracting the request payload keys into our instance properties. This allows us to therefore bind our instance to the `body` payload parameter that comes in our POST request method:

```dart
class ReadsController extends ResourceController {
  ...
  ...
  @Operation.post()
  Future<Response> createNewRead(@Bind.body() Read body) async {
    // Notice the `body` parameter cast to the `Read` Serializable subclass
    ...
  }
  ...
  ...
}
```

See how this works in more detail and how we integrate a fully functional PostgreSQL database in the [**full video**](http://bit.ly/aqueduct-tutorial-3).

## **Further reading**

1. [**Handling HTTP Requests**: Serializable Objects](http://aqueduct.io/docs/http/request_and_response/#serializable-objects)
    
2. [**Aqueduct Docs**: Reading from a Database](http://aqueduct.io/docs/tut/executing-queries/)
    
3. [**Free Dart screencasts on Egghead.io**](https://egghead.io/instructors/jermaine-oppong)
