network_y 0.1.2 copy "network_y: ^0.1.2" to clipboard
network_y: ^0.1.2 copied to clipboard

Network package for Project Y.

network_y 🌐 #

Description #

network_y is a simple, flexible abstraction layer for handling network-related operations in Dart and Flutter applications. It provides a clean interface for making HTTP requests, managing responses, and handling errors, allowing easy integration and switching between different HTTP clients. 🚀

Quick Start #

Here's a minimal example to get you started with network_y:

// Define your request
class GetUserRequest extends GetRequest {
  GetUserRequest(int userId) : super(
    baseUrl: 'https://api.example.com',
    endpoint: '/users/$userId',
  );
}

// Set up the client
final apiClient = ApiClient(apiExecutor: DioApiExecutor());

// Make a request
final result = await apiClient<Map<String, Object?>>(GetUserRequest(1));

// Handle the result
result.fold(
  onSuccess: (data) => print('User data: $data'),
  onFailure: (error) => print('Error: ${error.userFriendlyMessage}'),
);

This simple example demonstrates how to define a request, set up the client, make a call, and handle the result.

Key Components #

classDiagram
    class ApiClient {
        +ApiExecutor executor
        +call(Request) AsyncResult
    }
    class ApiExecutor {
        <<interface>>
        +get(Request) AsyncResult
        +post(Request) AsyncResult
        +patch(Request) AsyncResult
        +setUp(SetupRequest)
    }
    class Request {
        <<abstract>>
        +String baseUrl
        +String endpoint
        +Headers headers
        +QueryParameters queryParameters
        +Duration timeout
    }
    class GetRequest {
        <<interface>>
    }
    class PostRequest {
        <<interface>>
        +Payload body
    }
    class PatchRequest {
        <<interface>>
        +Payload body
    }
    class DioApiExecutor {
        +get(Request) AsyncResult
        +post(Request) AsyncResult
        +patch(Request) AsyncResult
        +setUp(SetupRequest)
    }
    class Result {
        <<abstract>>
    }
    class Success {
        +value
    }
    class Failure {
        +ApiException error
    }

    ApiClient --> ApiExecutor
    ApiExecutor <|.. DioApiExecutor
    ApiClient --> Request
    Request <|-- GetRequest
    Request <|-- PostRequest
    Request <|-- PatchRequest
    ApiClient --> Result
    Result <|-- Success
    Result <|-- Failure

ApiExecutor 🔧 #

ApiExecutor is responsible for making the actual network requests. Internally, it can use various HTTP client packages like dio, http, etc. The beauty of this design is that you can easily switch between different executors without changing your application code.

ApiClient 🖥️ #

ApiClient is the main class you'll interact with to make network requests. It takes an ApiExecutor as an argument, allowing you to easily switch between different network implementations.

final apiClient = ApiClient(apiExecutor: DioApiExecutor());

This design makes it simple to change your underlying HTTP client or mock network requests for testing.

How to Use #

Request Types #

  • GetRequest: For GET requests 📥
  • PostRequest: For POST requests with a body 📤
  • PatchRequest: For PATCH requests with a body 🔄

ApiException #

A comprehensive exception class that provides detailed information about network errors. 🚨

Examples #

Making a GET Request #

class UserGetRequest extends GetRequest {
  UserGetRequest({required int userId})
      : super(
          baseUrl: 'https://api.example.com',
          endpoint: '/users/$userId',
        );
}

final request = UserGetRequest(userId: 1);
final result = await apiClient
2
likes
0
pub points
47%
popularity

Publisher

unverified uploader

Network package for Project Y.

Homepage
Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

core_y, dio, meta

More

Packages that depend on network_y