WAPI - Web API Server Spec
por Roger Leite - 2012
Table of Contents
- Web API Server Spec
- Interfaces
- Styles
O WAPI Server, é uma spec que descreve os componentes necessários para publicar um domínio. Os exemplos estão em Ruby, naturalmente fácil de entender.
Modelagem das responsabilidades das interfaces.
Domain é a classe que define:
- [Config]
- [Models]
- [Style]
- [Filters]
O config deve ter os seguintes campos:
name # => "Song Domain"
env # => :development (by default)
# can be informed by environment, using WAPI_ENV variable.
Mapa de modelos que o domínio atende.
Exemplo:
SongDomain.models do
# How to use model map.
# name - name from resource
model :artists
model :albums
model :songs
end
A principal função do Style é usar o domain para:
- Criar rotas para os models.
- Atender requests com um controller default, estilo inherit resources.
- Registrar filters do Style.
No capítulo [RestfulByRos], você pode ver um exemplo de Style.
Funciona em chain como os Rack::Middleware. Durante o filtro, tem acesso a domain, request e response.
É o style que disponibiliza o seu domain usando o principio REST da tese Architectural Styles and the Design of Network-based Software Architectures do Roys Fielding.
Usar os models do domain para montar as rotas:
# for Artist model that has many Albums. See Models chapter for example.
/artists [ POST] - To create.
[ GET] - List with filter query params.
/artists/new [ GET] - Describe model structure.
/artists/:id [ GET] - Retrieve artist info.
[ PUT] - List with filter query params.
[DELETE] - List with filter query params.
/albums [ POST] - To create.
[ GET] - List with filter query params.
/albums/new [ GET] - Describe model structure.
/albums/:id [ GET] - Retrieve artist info.
[ PUT] - List with filter query params.
[DELETE] - List with filter query params.
Adiciona filter CacheHeaders, responsável por adicionar http headers de cache.
Valida constraints do request.
- Se o verbo usado não for permitido, retorna um
401 Unauthorized
com headerAllow
incluíndo os VERBS permitidos.
Faz algo como Inherit Resources.
Segue as regras Restful de etiqueta.
- Após post, retorna
201 Created
com headerLocation
com a url do documento. - Após put, TODO.
- Após delete, TODO.
- Após get, TODO.