|
- travel audience Go challenge
- ============================
-
- Task
- ----
-
- Write an HTTP service that exposes an endpoint "/numbers". This endpoint receives a list of URLs
- though GET query parameters. The parameter in use is called "u". It can appear
- more than once.
-
- http://yourserver:8080/numbers?u=http://example.com/primes&u=http://foobar.com/fibo
-
- When the /numbers is called, your service shall retrieve each of these URLs if
- they turn out to be syntactically valid URLs. Each URL will return a JSON data
- structure that looks like this:
-
- { "numbers": [ 1, 2, 3, 5, 8, 13 ] }
-
- The JSON data structure will contain an object with a key named "numbers", and
- a value that is a list of integers. After retrieving each of these URLs, the
- service shall merge the integers coming from all URLs, sort them in ascending
- order, and make sure that each integer only appears once in the result. The
- endpoint shall then return a JSON data structure like in the example above with
- the result as the list of integers.
-
- The endpoint needs to return the result as quickly as possible, but always
- within 500 milliseconds. It needs to be able to deal with error conditions when
- retrieving the URLs. If a URL takes too long to respond, it must be ignored. It
- is valid to return an empty list as result only if all URLs returned errors or
- took too long to respond.
-
- Example
- -------
-
- The service receives an HTTP request:
-
- >>> GET /numbers?u=http://example.com/primes&u=http://foobar.com/fibo HTTP/1.0
-
- It then retrieves the URLs specified as parameters.
-
- The first URL returns this response:
-
- >>> GET /primes HTTP/1.0
- >>> Host: example.com
- >>>
- <<< HTTP/1.0 200 OK
- <<< Content-Type: application/json
- <<< Content-Length: 34
- <<<
- <<< { "number": [ 2, 3, 5, 7, 11, 13 ] }
-
- The second URL returns this response:
-
- >>> GET /fibo HTTP/1.0
- >>> Host: foobar.com
- >>>
- <<< HTTP/1.0 200 OK
- <<< Content-Type: application/json
- <<< Content-Length: 40
- <<<
- <<< { "number": [ 1, 1, 2, 3, 5, 8, 13, 21 ] }
-
- The service then calculates the result and returns it.
-
- <<< HTTP/1.0 200 OK
- <<< Content-Type: application/json
- <<< Content-Length: 44
- <<<
- <<< { "number": [ 1, 2, 3, 5, 7, 8, 11, 13, 21 ] }
-
-
- Completion Conditions
- ---------------------
-
- Solve the task described above using Go. Only use what's provided in the Go
- standard library. The resulting program must run stand-alone with no other
- dependencies than the Go compiler.
-
- Document your source code, both using comments and in a separate text file that
- describes the intentions and rationale behind your solution. Also write down
- any ambiguities that you see in the task description, and describe you how you
- interpreted them and why. If applicable, write automated tests for your code.
-
- For testing purposes, you will be provided with an example server that, when
- run, listens on port 8090 and provides the endpoints /primes, /fibo, /odd and
- /rand.
-
- Please return your working solution within 7 days of receiving the challenge.
|