Service
In this guide, we'll go through the steps to create a new service in your SoapJS project. You can create services using CLI commands, interactive forms, or by defining them in a JSON file.
// Example service abstract class (or interface)
export interface WeatherService {
static Token = "WeatherService";
public getWeatherByCity(city: string): Promise<Result<Weather>>;
}
// Example service implementation
class WeatherServiceImpl implements WeatherService {
constructor(
private apiKey: string,
private baseUrl: string) {}
async getWeatherByCity(city: string): Promise<Result<Weather>> {
try {
const response =
await axios.get(`${this.baseUrl}?q=${city}&appid=${this.apiKey}`);
return Result.withContent(Weather.from(response.data));
} catch (error) {
return Result.withFailure(error);
}
}
}In SoapJS projects, services operates similarly to a repository, utilizing IoC (Inversion of Control) principles. In the business logic, we refer to the WeatherService interface rather than a specific implementation, ensuring decoupling and flexibility. The actual service bound to this interface, such as WeatherServiceImpl, is determined within the Dependencies configuration, allowing for easy substitution and testing.
export class Dependencies {
public async configure() {
// rest of the components ...
container
.bind<WeatherService>(WeatherService.Token)
.toContantValue(
new WeatherServiceImpl(
process.env['WEATHER_API_KEY'],
process.env['WEATHER_API_URL']
)
);
}
}Creating new service
Using CLI Command with options
To create a new service directly via the CLI, use the following command:
soap new service -n "Weather" -e "weather" -m "getWeatherByCity(city:string):Weather" -w -fOptions explained:
-n: Name of the service (e.g., "Weather").-e: Endpoint associated with the service (e.g., "weather").-m: Method name(s)/ declaration(s), separated by commas.-w: Generate with dependencies included.-f: Force the creation, overwrite files if necessary.--help: display help for command
Using Interactive Form
If you prefer to use an interactive form to specify your service details, simply run:
soap new service -w -fFollow the prompts to enter your service's details.
Using JSON Configuration
Alternatively, you can define your services in a JSON file. Here is an example structure:
{
"services": [
{
"name": "Weather",
"endpoint": "weather",
"methods": [
{
"name": "getWeatherByCity",
"params": ["city:string"],
"return_type": "Weather"
}
]
}
]
}Save this to a file, for example api.json, and run:
soap new --json "./path/to/api.json" -w -fOptions:
--json: Path to your JSON configuration file.--no-tests: Skip test generation.--no-rel: Skip generating related files. You can also specify specific groups.--force: Force the creation, overwrite files if necessary.--patch: Add content to the files if they exists.
File Structure
After creating your service, your file structure (assuming default configuration settings) should look like this:
src/
- shop/
- data/
- services/
- weather.service-impl.ts
- index.ts
- domain/
- services/
- weather.service.ts
- index.ts
- entities/
- weather.ts
- index.ts
...Last updated