Skip to content

theiterators/pekko-http-microservice

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

df69610 · Jul 4, 2024
Jul 3, 2024
Jul 4, 2024
May 26, 2021
Jul 5, 2021
Aug 4, 2021
Aug 4, 2021
Aug 4, 2021
Jan 12, 2015
Feb 5, 2015
Feb 21, 2023
Dec 24, 2022
Feb 5, 2015
Jul 3, 2024

Repository files navigation

Akka HTTP microservice example

GitHub license Build Status

Due to recent Akka's license change, a fork named Pekko was created under the Apache Foundation. Starting a new project, you should consider using Pekko HTTP. There's a sibling open source template we've created named pekko-http-microservice.

This project demonstrates the Akka HTTP library and Scala to write a simple REST (micro)service. The project shows the following tasks that are typical for most Akka HTTP-based projects:

  • starting standalone HTTP server,
  • handling file-based configuration,
  • logging,
  • routing,
  • deconstructing requests,
  • unmarshalling JSON entities to Scala's case classes,
  • marshaling Scala's case classes to JSON responses,
  • error handling,
  • issuing requests to external services,
  • testing with mocking of external services.

The service in the template provides two REST endpoints - one which gives GeoIP info for given IP and another for calculating geographical distance between given pair of IPs. The project uses the service ip-api which offers JSON IP and GeoIP REST API for free for non-commercial use.

If you want to read a more thorough explanation, check out tutorial.

Deploy to Heroku Gitpod Ready-to-Code

Usage

Start services with sbt:

$ sbt
> ~reStart

With the service up, you can start sending HTTP requests:

$ curl http://localhost:9000/ip/8.8.8.8
{
  "city": "Mountain View",
  "query": "8.8.8.8",
  "country": "United States",
  "lon": -122.0881,
  "lat": 37.3845
}
$ curl -X POST -H 'Content-Type: application/json' http://localhost:9000/ip -d '{"ip1": "8.8.8.8", "ip2": "93.184.216.34"}'
{
  "distance": 4347.624347494718,
  "ip1Info": {
    "city": "Mountain View",
    "query": "8.8.8.8",
    "country": "United States",
    "lon": -122.0881,
    "lat": 37.3845
  },
  "ip2Info": {
    "city": "Norwell",
    "query": "93.184.216.34",
    "country": "United States",
    "lon": -70.8228,
    "lat": 42.1508
  }
}

Testing

Execute tests using test command:

$ sbt
> test

Author & license

If you have any questions regarding this project, contact:

Łukasz Sowa [email protected] from Iterators.

For licensing info see LICENSE file in project's root directory.

Releases

No releases published

Packages

No packages published

Languages

  • Scala 99.3%
  • Procfile 0.7%