Modern URL shortener
- ASP.NET Core 3.1
- EntityFrameworkCore with PostgreSQL
- Docker (docker-compose)
/url/shorten
- all you need to specify is the target URL that needs to get shortened. Example:
Request
{
"target": "https://google.com/gokasokdoakdaaaaw123o"
}
Response
{
"id": 4,
"publicKey": "fe2a2e83-b666-4191-a6a9-17ca68f720aa",
"createdAt": "2020-04-20T04:18:02.5759202Z",
"target": "https://google.com/gokasokdoakdaaaaw123o",
"shortUrl": "https://gkama.it/Ore3vvu17J"
}
Randomly generating a 10 character long alphanumeric string to append to the shorten url. This is done via the RandomString()
method.
It uses Span<T>
and string.Create()
as the main methods of string creation
There is additional metadata that is stored in a separate table ccalled gkama_url_metadata
. An example of such data is the domain, path, query, fragment, etc. It is extracted using C#'s System.Uri
class. The logic converts the string
URL to an System.Uri
and extracts the information from it. Most of the fields are nullable as they're not always needed. Below is an example
{
"id": 1,
"urlId": 5,
"publicKey": "d58bde73-dff6-457e-a2b3-f65eae2392e5",
"createdAt": "2020-05-18T15:46:49.6928752Z",
"scheme": null,
"domain": "google.com",
"port": 0,
"path": null,
"query": null,
"fragment": null
}