Antes de leer esto: Esta no es una pregunta sobre "¿Es SignalR mejor que REST?"
Imagine crear un nuevo proyecto de API utilizando .Net 5 o 6. Veo muchos proyectos que proporcionan una API REST para
GETPOSTy concentradores SignalR para notificar a los clientes sobre cambios en tiempo real.
Basado en la muestra de documentos para SignalR
public class ChatHub : Hub { public async Task SendMessage(string user, string message) { await Clients.All.SendAsync("ReceiveMessage", user, message); } } los clientes pueden invocar acciones en el servidor que podrían escribir datos en una base de datos. Entonces podría reemplazar los puntos finales REST POST con acciones de concentrador.
Basado en la muestra de documentos para la comunicación.
También podría pedir datos, por ejemplo
public Task CallerRequestedAllMessages() { Message[] allMessages = database.ReadAllMessages(); // pseudo code return Clients.Caller.SendAsync("ReceiveMessages", allMessages); } y reemplace las solicitudes REST GET .
¿Hay alguna razón técnica para mantener la API REST? Por supuesto, no puedo consumir la API directamente así
curl -X GET --header 'Accept: application/json' 'https://my-api.com/messages'
pero eso no debería importar cuando se crea un cliente "real" que se conecta a los concentradores y parece que las personas están trabajando en paquetes para documentaciones de API de SignalR generadas automáticamente.
¿Hay algo que un proyecto API REST de .Net 6 proporcione o resuelva que un proyecto SignalR no pueda?
Realmente depende.
Rest es entre cliente y servidor .
SiglaR está entre el cliente y el servidor ADEMÁS (opcionalmente) para otros clientes también.
Otra cosa en Signalr es la capacidad de "empujar" datos al cliente. El resto no puede hacer eso.
Otra consideración es la batería. mantener un enchufe abierto consume más batería. Otra consideración es la fortaleza del servidor en términos de limitaciones de conexiones simultáneas.
Veo el beneficio de usarlos a ambos dependiendo del escenario.
En un entorno de señal de baja recepción, usaría Rest. no SignalR.
En un modo de batería baja, usaría Rest.not SignalR
En una comunicación uno a uno (solo cliente a servidor), usaría Rest, no signalR.