We start by focusing on the server implementation and ignore the client for now.
We can treat the server as a normal Node.js backend application. We can define services that read from the file system, query databases, make HTTP requests, and more.
For each route we then create a server component that composes the services, executes the final effect, and renders the page.
API service definition
In this example we define a server-only API that makes requests to jsonplaceholder.
We create a new Api.ts file inside services. Inside it, we implement the service using Effect.Service:
Learn more about
Effect.Servicehere: Effect.Service: Service and Layer all in one
import { Effect } from "effect";
export class Api extends Effect.Service<Api>()("Api", {
// ...
}) {}Api will contain all the methods that we need to make requests to the jsonplaceholder API:
getPosts: fetches an array of postsgetPostById: fetches a single post by id
Before we can implement these methods, we first define a HttpClient that will be used to make requests to the API.
Let's do this next.
