mirror of
https://github.com/samsonjs/Osiris.git
synced 2026-03-25 08:55:48 +00:00
This introduces a cleaner, more intuitive API for making HTTP requests
with explicit methods for different content types and built-in Codable
support.
**New**
- Add explicit request methods: .postJSON(), .postForm(),
.postMultipart() for clear intent
- Add direct `Codable` body support with automatic JSON
encoding/decoding
- Add `HTTPRequestBody` enum for internal type safety and cleaner
implementation
- Add proper query parameter encoding for GET and DELETE requests
(previously ignored)
- Add URLSession extensions for streamlined async JSON decoding with
`HTTPError` for failure response status codes
- Add comprehensive test coverage
The new API replaces the parameter-based methods using dictionaries with
explicitly-typed ones. Instead of passing a content-type parameter, you
now use purpose-built methods like `postJSON` and `postForm`.
**Breaking changes**
- Minimum deployment targets raised to iOS 16.0 and macOS 13.0
- Direct access to `parameters` and `parts` properties deprecated on
`HTTPRequest`
- GET and DELETE requests now validate that they don't have request
bodies, and the new API prevents you from constructing them
64 lines
1.9 KiB
Swift
64 lines
1.9 KiB
Swift
//
|
|
// Created by Sami Samhuri on 2017-07-28.
|
|
// Copyright © 2017 1 Second Everyday. All rights reserved.
|
|
// Released under the terms of the MIT license.
|
|
//
|
|
|
|
import Foundation
|
|
|
|
/// Specific errors for HTTP request processing.
|
|
public enum HTTPRequestError: Error, LocalizedError, CustomStringConvertible {
|
|
|
|
/// An HTTP error occurred (non-2xx status code).
|
|
case http
|
|
|
|
/// An unknown error occurred (typically when URLResponse isn't HTTPURLResponse).
|
|
case unknown
|
|
|
|
/// Invalid request body for the HTTP method.
|
|
case invalidRequestBody
|
|
|
|
public var errorDescription: String? {
|
|
switch self {
|
|
case .http:
|
|
return "HTTP request failed with non-2xx status code"
|
|
case .unknown:
|
|
return "An unknown error occurred"
|
|
case .invalidRequestBody:
|
|
return "GET and DELETE requests cannot have a body"
|
|
}
|
|
}
|
|
|
|
public var failureReason: String? {
|
|
switch self {
|
|
case .http:
|
|
return "The server returned an error status code"
|
|
case .unknown:
|
|
return "An unexpected error occurred during the request"
|
|
case .invalidRequestBody:
|
|
return "The HTTP method does not support a request body"
|
|
}
|
|
}
|
|
|
|
public var recoverySuggestion: String? {
|
|
switch self {
|
|
case .http:
|
|
return "Check the server response for error details"
|
|
case .unknown:
|
|
return "Check network connectivity and try again"
|
|
case .invalidRequestBody:
|
|
return "Use query parameters instead of a request body for GET and DELETE requests"
|
|
}
|
|
}
|
|
|
|
public var description: String {
|
|
switch self {
|
|
case .http:
|
|
"HTTPRequestError.http"
|
|
case .unknown:
|
|
"HTTPRequestError.unknown"
|
|
case .invalidRequestBody:
|
|
"HTTPRequestError.invalidRequestBody"
|
|
}
|
|
}
|
|
}
|