다트 개구리
19498 단어 spanishprogrammingdartwebdev
Dart Frog 🐸 es un framework web construido sobre Shelf inspirado por Next.JS , Remix y Express .
Otro Angel 또는 Aqueduct ?
Solo algunos que planeábamos hacer backend con Dart teníamos la esperanza con estos dos frameworks que al día de hoy lamentablemente ya nos acompañan.
Sin embargo podemos ver que este nuevo proyecto de llevar Dart al backend(otra vez) esta en buenas manos. Very Good Ventures esta detrás de esto por lo que podemos esperar grandes cosas, aunque tampoco dejemos de lado nuestro apoyo como comunidad, actualmente no se aceptan PR por que el 로드맵 esta ya bien definido, pero issues son bienvenidos.
Asi que hablando de 로드맵...
문제가 없습니까?
✅ 핫 리로드 ⚡️
✅ 다트 개발자 도구 ⚙️
✅ 파일 시스템 라우팅 🚏
✅ 색인 경로 🗂
✅ 중첩 경로 🪆
✅ 동적 경로 🌓
✅ 미들웨어 🍔
✅ 의존성 주입 💉
✅ 프로덕션 빌드 👷♂️
✅ 도커 🐳
✅ 정적 파일 지원 📁
레이더를 사용하려면 어떻게 해야 합니까?
🚧 Dart API 클라이언트 생성
🚧 오픈 API 문서 생성
🚧 DartFrog 테스트 라이브러리(단위 및 e2e 테스트용 유틸리티)
🚧 새로운 경로와 미들웨어를 생성하는 CLI 새 명령
🚧 모니터링을 위한 상태 확인 엔드포인트
🚧 표준 로그 형식을 준수하도록 구성할 수 있는 로거( https://cloud.google.com/run/docs/logging )
🚧 웹소켓 지원
🚧 DartFrog에 대한 VSCode/IntelliJ 지원
🚧 새 프로젝트 만들기
🚧 새로운 경로
🚧 새로운 미들웨어
🚧 디버거 연결
🚧 지원되는 클라우드 플랫폼(예: Cloud Run)에 대한 배포를 지원하는 CLI 배포 명령
다트 앤 백엔드
Sin duda un proyecto prometedor en el que pongo la confianza para regresar a Dart 백엔드. En su momento hice un pequeño blog sobre donde desplegamos en Railway un servidor con Dart. Traer un ejemplo actualizado con Dart Frog, un poco mas complejo para que valga la pena.
Pero mientras tanto que tal si hacemos un pequeñísimo ejemplo de Todo app? Que nada mas registre y liste, solo para no irnos sin programar algo. 🧑💻
엠페세모스
Te dejo el repositorio por si solo quieres ver el resultado final.
Definamos un modelo básico de Todo.
// models/todo.dart
import 'package:uuid/uuid.dart';
enum Status { open, inProgress, close }
class Todo {
Todo(String? id, this.title, this.description, this.status)
: id = id ?? const Uuid().v4();
factory Todo.fromJson(Map<String, dynamic> json) {
return Todo(
json['id'] as String,
json['title'] as String,
json['description'] as String,
Status.values
.firstWhere((status) => json['status'] as String == status.name),
);
}
String id;
String title;
String description;
Status status;
Map<String, dynamic> toJson() {
return {
'id': id,
'title': title,
'description': description,
'status': status.name
};
}
}
Por el momento las rutas se crean al mas puro estilo de Nextjs... 🙅♂️
FutureOr<Response> onRequest(RequestContext context) async {
switch (context.request.method) {
case HttpMethod.get:
return Response(body: 'Get');
case HttpMethod.post:
return Response(body: 'Post');
case HttpMethod.delete:
case HttpMethod.head:
case HttpMethod.options:
case HttpMethod.patch:
case HttpMethod.put:
return Response(statusCode: HttpStatus.methodNotAllowed);
}
}
Y a mi no me encanta ese método así que hagamos una pequeña clase que nos ayude un poco con el 상용구.
// utils/route_builder.dart
import 'dart:async';
import 'dart:io';
import 'package:dart_frog/dart_frog.dart';
class RouteBuilder {
final Map<HttpMethod, Handler> _handlers = {};
FutureOr<Response> hanlder(RequestContext context) {
if (_handlers.containsKey(context.request.method)) {
return _handlers[context.request.method]!(context);
}
return Response(statusCode: HttpStatus.methodNotAllowed);
}
void get(Handler handler) => _handlers[HttpMethod.get] = handler;
void post(Handler handler) => _handlers[HttpMethod.post] = handler;
void delete(Handler handler) => _handlers[HttpMethod.delete] = handler;
void head(Handler handler) => _handlers[HttpMethod.head] = handler;
void options(Handler handler) => _handlers[HttpMethod.options] = handler;
void patch(Handler handler) => _handlers[HttpMethod.patch] = handler;
void put(Handler handler) => _handlers[HttpMethod.put] = handler;
}
Y con todo listo solo creemos nuestra nueva ruta para todos.
// routes/todos.dart
import 'dart:async';
import 'package:dart_frog/dart_frog.dart';
import 'package:uuid/uuid.dart';
import '../models/todo.dart';
import '../utils/route_builder.dart';
final _todos = [];
final _routeBuilder = RouteBuilder()
..get((context) {
return Response.json(body: _todos);
})
..post((context) async {
final jsonTodo = await context.request.json();
jsonTodo['status'] = 'open';
jsonTodo['id'] = const Uuid().v4();
final newTodo = Todo.fromJson(jsonTodo);
_todos.add(newTodo);
return Response.json(body: newTodo.toJson());
});
FutureOr<Response> onRequest(RequestContext context) async =>
_routeBuilder.hanlder(context);
Echemos a volar nuestro proyecto.
$ dart_frog dev
Y ya lo tenemos 🎉
인테그라모스 반응? Hacemos de Dart Frog FullStack?
Happy Hacking 🧑💻🎉에 대한 댓글 보기
Reference
이 문제에 관하여(다트 개구리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/ushieru/dart-frog-1hco텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)