Microservices: A Language-Based Approach