PHPackages                             keisukesaichi/api-dto - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. keisukesaichi/api-dto

ActiveLibrary[API Development](/categories/api)

keisukesaichi/api-dto
=====================

1.0.1(4mo ago)0111MITPHP

Since Jan 7Pushed 4mo agoCompare

[ Source](https://github.com/twinkle-fff/APIDto)[ Packagist](https://packagist.org/packages/keisukesaichi/api-dto)[ RSS](/packages/keisukesaichi-api-dto/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (4)Used By (1)

【現状】 俺の使うためのDTOのabstractクラスだ。

俺が使うために作ったが、お前らも使っていいぞ

インストール packagestに登録しているので、composerから使用できる。

$ composer require keisukesaichi/api\_dto

現在の最新バーションは 1.0.0 だ。

概要 このライブラリは、API通信用の Request / Response DTO を 「雑に書いても後で壊れない」ようにするための基盤だ。

目的は以下：

・immutable（readonly）前提 ・deprecated を踏まない ・Reflection を乱用しない ・DTOに余計な仕事をさせない

DDDを厳密にやりたい人向けではない。 APIを殴るためのDTOを、ちゃんとした形で持ちたい人向け。

提供しているもの

BaseRequestDto APIリクエスト用DTOの基底クラス。

・readonly（immutable） ・setXxx() による fluent な組み立て ・array / query / json への変換を提供

主な機能：

・fromArray(array): static ・setXxx($value)（\_\_call 経由） ・toArray(): array ・toQuery(QueryNestOpenMode): string ・toJson(): string

BaseResponseDto APIレスポンス用DTOの基底クラス。

・JSON / array / object を入口に受け取れる ・型宣言に基づいて自動キャスト ・ネストしたDTOにも対応（再帰）

対応している型：

・string / int / bool / null ・BackedEnum（tryFrom） ・BaseValueObject（fromValue） ・BaseResponseDto（fromResponse） ・array&lt;Dto / Enum / ValueObject&gt; ※ arrayの中身は @var list のDocBlockから推測する

BaseValueObject 値オブジェクト用の基底クラス。

・fromValue() を必須化 ・validate() を必須化 ・実装忘れは即例外（fail fast）

QueryNestOpenMode クエリ生成時に、配列などのネストをどう展開するかを指定するEnum。

・JSONIZE a=\[1,2,3\]

・IMPLODE\_COMMA a=1,2,3

使用例（Request DTO）

final readonly class SearchRequest extends BaseRequestDto { public function \_\_construct( public ?string $q = null, public int $limit = 10, public array $tags = \[\], ) {} }

$req = SearchRequest::empty() -&gt;setQ('test') -&gt;setLimit(20) -&gt;setTags(\['php', 'api'\]);

$query = $req-&gt;toQuery(QueryNestOpenMode::IMPLODE\_COMMA); q=test&amp;limit=20&amp;tags=php,api

使用例（Response DTO）

final readonly class UserResponse extends BaseResponseDto { public function \_\_construct( public int $id, public string $name, ) {} }

$user = UserResponse::fromResponse(\[ 'id' =&gt; 1, 'name' =&gt; 'Alice', \]);

設計方針

・DTOは状態を持たない ・DTOにロジックを書かない ・setterは immutable 前提 ・private / protected プロパティは使わない ・setAccessible() は使わない（PHP 8.1+ 対応）

「賢いDTO」ではなく 「壊れにくいDTO」を目指している。

向いている人

・APIクライアントを自作している ・古いSDKのdeprecatedに苦しんでいる ・arrayベタ書きDTOに疲れた ・PHP 8.1+ 前提で書きたい

向いていない人

・フルDDDフレームワークが欲しい人 ・魔法の自動マッピングが好きな人 ・DTOにビジネスロジックを書きたい人

ライセンス MIT

###  Health Score

33

—

LowBetter than 75% of packages

Maintenance76

Regular maintenance activity

Popularity6

Limited adoption so far

Community10

Small or concentrated contributor base

Maturity37

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

132d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/6f0ee0d83f22edc8f3db9bd60d0121fe451b60b963f38e783826a1d063415e1e?d=identicon)[twinkle-fff](/maintainers/twinkle-fff)

---

Top Contributors

[![twinkle-fff](https://avatars.githubusercontent.com/u/121096113?v=4)](https://github.com/twinkle-fff "twinkle-fff (3 commits)")

### Embed Badge

![Health badge](/badges/keisukesaichi-api-dto/health.svg)

```
[![Health](https://phpackages.com/badges/keisukesaichi-api-dto/health.svg)](https://phpackages.com/packages/keisukesaichi-api-dto)
```

###  Alternatives

[stripe/stripe-php

Stripe PHP Library

4.0k143.3M480](/packages/stripe-stripe-php)[twilio/sdk

A PHP wrapper for Twilio's API

1.6k92.9M272](/packages/twilio-sdk)[facebook/php-business-sdk

PHP SDK for Facebook Business

90821.9M34](/packages/facebook-php-business-sdk)[meilisearch/meilisearch-php

PHP wrapper for the Meilisearch API

74513.7M114](/packages/meilisearch-meilisearch-php)[google/gax

Google API Core for PHP

265103.1M454](/packages/google-gax)[google/common-protos

Google API Common Protos for PHP

173103.7M50](/packages/google-common-protos)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
