# Data Transfer Object
To manage data-transmission from
- Client ⇒ Server / Server ⇒ Client
Data transfer objects - as the name implies - are objects that are used to transfer data.
Very often this means sending data over a network boundary - for example via a REST-API.
Data transfer objects solely hold data values. While classes or records that are used to implement DTOs can have additional functionality as methods, the main purpose is to (de-)serialize the data fields of DTOs so they can be transfered to its destination.
Usually DTOs don’t offer functionality that goes beyond storage, retrieval and (de-)serialization of their own data.
# Implementation
Commonly DTOs are implemented as simple classes with only properties (POCOs) or as record types.
# DTOs for REST API Design
DTOs can be very useful when designing REST APIs. Consider this data model:
# Entities in APIs
When using entities (for accessing and storing data) you might and up with something like this:
When using the entity above in your REST API you might end up with a POST Endpoint that would require you to send data in this form when adding a new student:
This raises at least 2 questions:
- Why do I need to specify an ID for the student? Shouldn’t the server take care of that?
- Why do I need to specify a list of grades for that student when I just want to add a student without any grades yet.