Scalaの面では何も提供できないのではないかと思いますが、Javaに関する限り、新しいサービスはアプリケーションのサービスレイヤーにあると考える必要がありますが、REST /SOAP/サービスへのインターフェイスはすべてWeb/サーブレット層で定義されています。
したがって、com.myco.servicesパッケージに次のようなサービスがあるとしましょう。
public interface PersonService {
public Person createPerson(PersonIdentifier id, PersonType type);
public Person retrievePerson(PersonIdentifier id);
public void updatePerson(Person existingPerson);
public void deletePerson(Person existingPerson);
public boolean authenticatePerson(String personName, String password);
}
これは、データベースなどを更新するPersonServiceImpl実装があることを示しています。同じJVM上のアプリケーションでは、PersonServiceImplをコードに挿入し、パラメーターをマーシャリングまたはアンマーシャリングすることなく、メソッドを直接呼び出すことができます。
Webレイヤーでは、サーブレットのURLにマップされる個別のPersonServiceControllerを使用できます。「http://myco.com/person/update」のようなURLがヒットすると、リクエストの本文を次のようにコントローラーに渡すことができます。
public class PersonServiceController {
private final PersonService personService; // Inject PersonServiceImpl in constructor
...
public void updatePerson(String requestBody) {
Person updatedPerson = unmarshalPerson(requestBody);
this.personService.updatePerson(updatedPerson);
}
...
}