Biblioteca Dart poderosa para gerar APIs REST usando anotações. Com uma interface simples e intuitiva, você pode facilmente criar APIs rápidas, eficientes e fáceis de usar.
Orientação gerada a partir de informações públicas. Apenas para referência.
Annotated_Shelf é uma poderosa biblioteca Dart que simplifica a criação de APIs REST usando anotações. Ela fornece uma interface limpa e intuitiva para definir rotas, manipuladores de requisições e respostas diretamente por meio de anotações no código. Construída sobre o framework Shelf, permite que desenvolvedores gerem APIs eficientes e seguras por tipo com pouca repetição de código. Ideal para desenvolvimento rápido de APIs, suporta integração perfeita com documentação OpenAPI/Swagger. A biblioteca roda em macOS, Windows e Linux, tornando-a adequada para serviços backend multiplataforma.
Casos de uso
Construindo APIs RESTful com configuração mínima
Gerando documentação OpenAPI a partir do código
Prototipagem rápida de serviços de backend
Criando pontos finais seguros por tipo usando anotações
Integração com projetos Dart existentes
Principais recursos
Definição de rota baseada em anotações
Construído na prateleira para alto desempenho
Documentação automática OpenAPI/Swagger
Suporte à modelagem de solicitação/resposta
Compatibilidade multiplataforma
Indicado para
Desenvolvedores Dart construindo APIs de backend
Equipes que precisam de scaffolding de API rápido
Projetos que exigem integração com OpenAPI
Desenvolvedores que preferem o estilo de codificação declarativo
Serviços de backend direcionados a múltiplas plataformas
Considerações
Requer familiaridade com anotações Dart
Limitado à arquitetura de servidor baseada em prateleiras
Pode ser necessário configuração adicional para roteamento complexo
Mais adequado para APIs menores a médias
A geração de documentação depende da precisão das anotações
README original
Snapshot do README original do repositório-fonte vinculado. Consulte o repositório para o conteúdo mais recente.
Powerful, Lightweight, Fast development, Easy to learn
Annotated Shelf is a powerful and lightweight Dart framework for generating REST APIs using annotations. Based on the popular Shelf library. Annotated Shelf provides a simple and intuitive interface for building APIs fast, efficiently, and easy to use without losing what Shelf can offer.
Features
Support for multiple HTTP methods and request types.
Support for File upload.
Automatic validation of request parameters.
Automatic Error responses based on exceptions.
Installation
To install Annotated Shelf, add it as a dependency in your pubspec.yaml file:
dependencies:annotated_shelf:^0.1.0
Then, run pub get to install the package.
Getting Started
To use Annotated Shelf to create a REST API, import the library and annotate your models and controllers with the following annotations:
@RestAPI,
@GET,
@POST,
@PUT,
@DELETE,
@PATCH,
Annotated Shelf will automatically generate the necessary routes and endpoints based on the annotations you have provided.
Example
import'package:annotated_shelf/annotated_shelf.dart';
import'package:shelf/shelf.dart';
import'package:shelf/shelf_io.dart'as io;
const _hostname = 'localhost';
const _port = 8080;
var itemsList = [Item("first item"), Item("second Item")];
classItemextendsPayload{
finalString? name;
Item(this.name);
@overridefactoryItem.fromJson(Map<String, dynamic> json) {
returnItem(json["name"]);
}
@overrideMap<String, dynamic> toJson() => {"name": name};
}
classTestFormextendsForm{
String name;
int number;
File image;
TestForm(this.name, this.number, this.image);
@overridefactoryTestForm.fromJson(Map<String, dynamic> json) {
returnTestForm(
json['name'] asString,
json['number'] asint,
File.fromJson(json['image'] asMap<String, dynamic>),
);
}
@overrideMap<String, dynamic> toJson() => <String, dynamic>{
'name': name,
'number': number,
'image': image,
};
}
@RestAPI(baseUrl: '/to-do/list')
classItemsAdaptor{
@GET()
List<Item> getAllItems(Request request) {
return itemsList;
}
@GET(url: "/<itemName>")
ItemgetItemByName(String itemName) {
var index = itemsList.lastIndexWhere((element) => element.name == itemName);
if (index >= 0) {
return itemsList[index];
} else {
throwNotFoundError('item not found'); // this creates a 404 response
}
}
@PUT(url: "/<itemName>")
ItemupdateItem(Item item, String itemName) {
var index = itemsList.lastIndexWhere((element) => element.name == itemName);
if (index >= 0) {
itemsList[index] = item;
returngetItemByName(item.name ?? '');
} else {
throwNotFoundError('item not found'); // this creates a 404 response
}
}
@POST(url: "/")
ResponsecreateNewItem(Item item) {
var index =
itemsList.lastIndexWhere((element) => element.name == item.name);
if (index == -1) {
itemsList.add(item);
returnResponse(201); // pass a shelf response
} else {
throwBadRequestError('item with name in list');
}
}
// examplo of uploading a file@POST(url: '/upload')
Future<RestResponse> upload(TestForm form) async {
print(form);
returnnewRestResponse(201, {"msj": 'ok'}, "application/json");
}
}
Future<void> main(List<String> args) async {
var router = Cascade();
router = awaitmount(ItemsAdaptor(), router);
var server = await io.serve(router.handler, _hostname, _port);
print('Serving at http://${server.address.host}:${server.port}');
}
/*
-------------------------------------
mounting Instance of 'ItemsAdaptor'
adding get to-do/list
adding get to-do/list/<iteName>
adding put to-do/list/<iteName>
adding post to-do/list/
adding post to-do/list/upload
-------------------------------------
Serving at http://localhost:8080
*/
Contributing
We welcome contributions to Annotation Shelf! If you have an idea for a new feature or have found a bug, please open an issue on GitHub.
License
Annotation Shelf is released under the BSD-3-Clause. See LICENSE for details.
thanks
Special thanks to the Shelf project team for providing us with the opportunity to create servers using this beautiful language.