fsprojects / FSharp.Data

F# Data: Library for Data Access
https://fsprojects.github.io/FSharp.Data
Other
806 stars 288 forks source link

Provide a Http request type #1319

Open codingedgar opened 3 years ago

codingedgar commented 3 years ago

Currently FSharp.Data.Http.Request has multiple arguments:

static member Request
            (
                url,
                [<Optional>] ?query,
                [<Optional>] ?headers,
                [<Optional>] ?httpMethod,
                [<Optional>] ?body,
                [<Optional>] ?cookies,
                [<Optional>] ?cookieContainer,
                [<Optional>] ?silentHttpErrors,
                [<Optional>] ?silentCookieErrors,
                [<Optional>] ?responseEncodingOverride,
                [<Optional>] ?customizeHttpRequest,
                [<Optional>] ?timeout
            ) =
        Http.AsyncRequest(url, ?query=query, ?headers=headers, ?httpMethod=httpMethod, ?body=body, ?cookies=cookies, ?cookieContainer=cookieContainer,?silentCookieErrors=silentCookieErrors,
                          ?silentHttpErrors=silentHttpErrors, ?responseEncodingOverride=responseEncodingOverride, ?customizeHttpRequest=customizeHttpRequest, ?timeout=timeout)
        |> Async.RunSynchronously

Could this be a Type so we could use it/parse/store etc? Something like:

    type Request =
        { url: string
          query: option<list<string * string>>
          headers: option<seq<string * string>>
          httpMethod: option<string>
          body: option<FSharp.Data.HttpRequestBody>
          cookies: option<seq<string * string>>
          cookieContainer: option<System.Net.CookieContainer>
          silentHttpErrors: option<bool>
          silentCookieErrors: option<bool>
          responseEncodingOverride: option<string>
          customizeHttpRequest: option<System.Net.HttpWebRequest -> System.Net.HttpWebRequest>
          timeout: option<int> }
bonjune commented 1 year ago
type Request =
    { url: string
      query: option<list<string * string>>
      headers: option<seq<string * string>>
      httpMethod: option<string>
      body: option<FSharp.Data.HttpRequestBody>
      cookies: option<seq<string * string>>
      cookieContainer: option<System.Net.CookieContainer>
      silentHttpErrors: option<bool>
      silentCookieErrors: option<bool>
      responseEncodingOverride: option<string>
      customizeHttpRequest: option<System.Net.HttpWebRequest -> System.Net.HttpWebRequest>
      timeout: option<int> }

// Add the method below

static member Request(url, config) =
    Http.AsyncRequest(url, ?query = config.query, ... )
    |> Async.RunSynchronously

I think you can do this by overloading.