Skip to content

feat!: add Server Actor client and sync with Apify OpenAPI spec v2-2026-11-06T140128Z - #21

Merged
Pijukatel merged 3 commits into
masterfrom
claude/brave-hypatia-3x9r01
Nov 9, 2026
Merged

Pijukatel merged 3 commits into
masterfrom
claude/brave-hypatia-3x9r01

Conversation

@Pijukatel

@Pijukatel Pijukatel commented Nov 9, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

Syncs the PHP client with OpenAPI spec v2-2026-11-06T140128Z (apify/apify-docs#3084, #3152) and ports apify-client-js #1179, #1187, #1190 and #1197. The client version goes to 0.13.0 (breaking: count on offset pages has a new meaning).

Spec sync

  • New ActorVersion::getActorPath() and Actor::getStandbyUrl(). Models return fields as the API sends them, so these getters are the only model changes.
  • Version create and update request bodies carry actorPath, including an explicit null.
  • ActorStandby.tenancy and the admin-only fields are documented.

Server Actors (JS #1179)

  • ActorClient::server() returns an ActorServerClient, created once and reused, with request(), getUrl() and getOpenApiSpec().
  • Each request has its own settings for compression, the authorization header name, whether error statuses throw, which status codes and transport errors are retried, redirects, and streaming. These mirror the new ApifyRequestConfig options in the JS client.
  • Turning off redirects needs support from the HTTP transport. That support is a new optional NoRedirectHttpClientInterface, which GuzzleHttpClient implements, so HttpClientInterface and existing custom transports are unchanged. If the transport cannot turn off redirects, request() throws before sending, so the token never follows a redirect.
  • Server requests decide whether to compress based on the caller's own Content-Type, and drop a stale Content-Length from compressed bodies. A response with application/json-seq is handled by getData().
  • The JS client's deprecated standby() alias is not ported, because the PHP client never had a standby() method.

Offset page count (JS #1187, #1190, #1197)

  • count on a dataset items page is the number of scanned rows, or the number of items returned if that is larger.
  • Every offset iterator, including DatasetClient::iterateItems(), steps by min(max(count, items), pageLimit).
  • The docs now describe the page size used when iterating without chunkSize (#1190). #1197 is covered by the spec regeneration.
  • JS #1188 (rejecting a non-positive signed URL expiresInSecs) was already in the PHP client, so nothing changed for it.

Tests and docs

  • New unit tests cover the server client, the Guzzle path that does not follow redirects, count, and actorPath.
  • New integration tests build and call a live echo Server Actor, store and remove actorPath, and check count with skipEmpty.
  • README, docs and the CHANGELOG are updated.

…and port the apify-client-js Server Actor, dataset count and pagination docs changes

- Spec sync: actorPath on Actor versions, standbyUrl getter.
- Add ActorClient::server() with ActorServerClient (request, getUrl, getOpenApiSpec).
- Add NoRedirectHttpClientInterface so a request carrying the token can refuse redirects.
- Breaking: the count of a dataset items page is the scanned rows, or the items returned when larger.
- Document the page size of iteration without chunkSize.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_017ocuAGnQ7tWM7EdPahZPAA
…ctor request compression

Share one offset iterator between collections and dataset items (JS #1187), judge compressibility on the caller's Content-Type, drop a stale Content-Length from compressed bodies, anchor the JSON content type, point the spec version at v2-2026-11-06T140128Z and tidy docs and tests.

Co-Authored-By: Claude Sonnet 5.5 <[email protected]>

Claude-Session: https://claude.ai/code/session_017ocuAGnQ7tWM7EdPahZPAA
@Pijukatel Pijukatel added adhoc Ad-hoc unplanned task added during the sprint. t-tooling Issues with this label are in the ownership of the tooling team. labels Nov 9, 2026 — with Claude
@apify-service-account apify-service-account added the tested Temporary label used only programatically for some analytics. label Nov 9, 2026
@Pijukatel
Pijukatel merged commit a63bb4f into master Nov 9, 2026
4 of 9 checks passed
@Pijukatel
Pijukatel deleted the claude/brave-hypatia-3x9r01 branch November 9, 2026 11:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

adhoc Ad-hoc unplanned task added during the sprint. t-tooling Issues with this label are in the ownership of the tooling team. tested Temporary label used only programatically for some analytics.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants