This is the CloudLayer API for easy access to our REST based API services using F#.
To read about how to get started using CloudLayer, see documentation here.
You can reference it directly from Nuget or Paket.
PS> Install-Package CloudLayer.FSharpThe assembly targets NetStandard 2.0.
To begin, create an API key from the dashboard.
All API calls take in a Connection:
let connection =
{ Connection.Defaults with ApiKey = "ca-644907a519df4f84b0db24b822b37c5e" }If you are using this from an Asp.Net Core app, you can specify a IHttpClientFactory to be used (this is usually available through Dependency Injection),
let connection' = { connection with ClientFactory = factory }IHttpClientFactory avoids socket exhaustion problems and maintains a pool of HttpClient instances for reuse. See this article for more.
API calls have, as the last argument a Connection, and they take the shape:
connection |> CloudLayerApi.apiCall : Async<Result<ReturnValue, FailureReason>>All API calls return the Result type, and they follow the railway-oriented approach.
You can check the status of your account with
let status =
connection |> CloudLayerApi.accountStatus |> Async.RunSynchronouslyThe results can be pattern matched.
match status with
| Ok status ->
$"{status.Remaining} of {status.Limit} remaining. " +
$"Limit resets at {status.ResetsAt.LocalDateTime}"
| Error err ->
match err with
| FailureReason.InvalidApiKey -> "Check your api key"
| FailureReason.InsufficientCredit -> "Buy more credit pls"
| FailureReason.SubscriptionInactive -> "Please activate your account"
| FailureReason.Unauthorized -> "Please check your credentials or proxy"
| other -> $"There was an error: {other}"
|> printfn "%s"CloudLayer can create images of public URLs:
let image =
connection |> CloudLayerApi.fetchImage (Url "https://google.com")and raw html:
let image =
connection |> CloudLayerApi.fetchImage (Html "<h1>Hello World!</h1>")and returns either a System.IO.Stream or a FailureReason.
match image with
| Ok (stream, status) ->
//do something with stream
| Error err ->
failwithf "Something went wrong: %A" errYou can save the result to a file with saveToFile, or read directly to memory with toByteArray.
connection
|> CloudLayerApi.fetchImage (Url "https://google.com")
|> CloudLayerApi.saveToFile "google.jpg"
|> Async.RunSynchronouslyTo use more configuration options, use fetchImageWith. Options are specified by the ImageOptions record.
connection
|> CloudLayerApi.fetchImageWith
{ ImageOptions.Defaults with
Source = Url "https://www.openstreetmap.org#map=13/-6.1918/71.2976"
Timeout = TimeSpan.FromSeconds 60.
Inline = false }
|> CloudLayerApi.saveToFile "eagle-island.jpg"
|> Async.RunSynchronouslyCreating PDFs is similar to the API for creating images.
connection |> CloudLayerApi.fetchPdf (Url "https://en.wikipedia.org/wiki/Marine_snow")
connection |> CloudLayerApi.fetchPdf (Html "<h1>Hello from PDF!</h1>")For more options, use fetchPdfWith. Options are specified by the PdfOptions record.
connection
|> CloudLayerApi.fetchPdfWith
{ PdfOptions.Defaults with
Source = (Url "https://en.wikipedia.org/wiki/Marine_snow")
PrintBackground = false
Format = "A4" }
|> CloudLayerApi.saveToFile "snow.pdf"
|> Async.RunSynchronously
This library is specifically for F#, if you are using C# you should use our C# library. We did this because we wanted to give F# developers first class support instead of wrapping a C# library.
