Services vs. Applications
When you start learning about service oriented architecture you might wonder, what the difference is between a service and an application.
There are no precise definitions of a service or an application. Services and applications are both software programs, but they do tend to have some differing traits. I have summed up the most common traits in the table below:
|Perform a single or a few specialized operations.||Perform a wide range of operations, and may even expose some of these operations as services.|
|Most often accessed by other programs.||Often (but not always) accessed by humans.|
|Often (but not always) targets part of a larger problem domain.||Often (but not always) targets a whole problem domain.|
Services often target smaller and more isolated problems than applications. Applications often expose and call services, sometimes services in other applications. It's hard to get more concrete than this. Here is an example of why:
A mail server (as software) can be thought of as both a service and an application. It runs on some server (hardware) somewhere on the network. It exposes 2-3 primary services: An SMTP service used to send email, and a POP3 and an IMAP service to read email via. The mail server may not have a user GUI that the users can interact with. They might just use some standard email clients.
The mail server may had an administrator GUI though. But there is no guarantee. The mail server could also just be configured via configuration files.
The reason I would still call a mail server an application is that it exposes 2-3 services, is intended to be used by end users (though via some client applications), and it targets a whole problem domain. But really, you might as well call it a "mail service". The border between services and applications is unclear.
Here is an illustration of the mail server example:
|A mail server (application) exposing 4 different services.|