fern-api / fern

Input OpenAPI. Output SDKs and Docs.
https://buildwithfern.com
Apache License 2.0
2.6k stars 139 forks source link

java, feature: pagination #3845

Closed dcb6 closed 3 months ago

dcb6 commented 3 months ago

Add support for cursor and offset pagination.

For example, consider the following endpoint /users endpoint:

  types:
    User:
      properties:
        name: string

    ListUserResponse:
      properties:
        next: optional<string>
        data: list<User>

  service:
    auth: false
    base-path: /users
    endpoints:
      list:
        path: ""
        method: GET
        pagination:
          cursor: $request.starting_after
          next_cursor: $response.next
          results: $response.data
        request:
          name: ListUsersRequest
          query-parameters:
            starting_after: optional<string>
        response: ListUsersResponse

The generated SyncPagingIterable<User> can then be used to traverse through the User objects:

  for (User user : client.users.list(...)) {
      System.out.println(user);
  }

Or stream them:

  client.users.list(...).streamItems().map(user -> ...);

Or statically calling nextPage() to perform the pagination manually:

  SyncPagingIterable<User> pager = client.users.list(...);
  // First page
  System.out.println(pager.getItems());
  // Second page
  pager = pager.nextPage();
  System.out.println(pager.getItems());