My approach aligns with common practice: generate JSON inside SQL (deterministic, testable) and let a minimal API simply return it. This keeps the logic close to the data, reduces app complexity, and makes validation trivial.
1) Stored procedure pattern (JSON OUT)
/* Stored procedure pattern (JSON OUT) */
CREATE OR ALTER PROC [dbo].[pr_GetDailySummaryJson]
@dailySummary nvarchar(max) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SELECT @dailySummary = (
SELECT [date] = CAST([tpep_pickup_datetime] AS date),
[trips] = COUNT(*),
[revenue] = ROUND(SUM([total_amount]), 2),
[avgDistance] = ROUND(AVG([trip_distance]), 2),
[avgMinutes] = ROUND(AVG(DATEDIFF(second, [tpep_pickup_datetime], [tpep_dropoff_datetime]))/60.0, 1)
FROM [dbo].[yellow_tripdata]
GROUP BY CAST([tpep_pickup_datetime] AS date)
ORDER BY [date]
FOR JSON PATH, ROOT('daily')
);
END;
GO