This is a modern PHP SDK for the DataCite REST API platform, built for maintainability and clarity using Saloon for HTTP integration. Supports DOI registration, metadata management, and retrieval operations.
- Use PHP 8.4+ syntax only
- Add
declare(strict_types=1);to every PHP file - Make all classes final unless inheritance is required
- Use readonly properties wherever possible
- Use constructor property promotion
- Use typed properties and return types
- Follow PSR-12 coding standards
- Never use
var_dump()ordd()in production code
- Base:
VincentAuger\DataCiteSdk - Data:
VincentAuger\DataCiteSdk\Data - Requests:
VincentAuger\DataCiteSdk\Requests - Enums:
VincentAuger\DataCiteSdk\Enums
- DTOs are
final readonly - Requests extend
Saloon\Http\Request - Requests are
final - Enums are backed enums with string or int values
- Use traits for shared functionality (see
Traits/directory) - Member-only requests must use
RequiresMemberAuthtrait
- Built on Saloon HTTP client framework
- DataCite.php is the main client entry point
- Requests/ contains Saloon request classes organized by API endpoint
- Data/ contains DTOs for API responses
- All responses should be typed using Data DTOs
Run these commands before committing:
composer test- runs all tests (lint, unit, types, refactor)composer lint- Laravel Pint code formattingcomposer test:unit- Pest unit testscomposer test:types- PHPStan static analysiscomposer refactor- Rector code improvements
- Use constructor property promotion for DTOs
- Implement request traits for shared parameters (HasPaginationParams, HasFieldParams, HasIdParams)
- Follow existing naming conventions in Data/ classes
- Use typed arrays in DocBlocks:
@var DoiObject[]
The DataCite API has two access levels:
- Public API (default) - Read-only access, no auth required (GET endpoints)
- Member API - Full access including create/update/delete (POST/PUT/DELETE endpoints)
Add the RequiresMemberAuth trait to any request class that:
- Uses POST, PUT, or DELETE methods
- Accesses member-specific data
- Modifies DOI records
use VincentAuger\DataCiteSdk\Traits\Requests\RequiresMemberAuth;
/**
* Create a new DOI
*
* This endpoint requires member API authentication.
*/
final class CreateDOI extends Request
{
use RequiresMemberAuth; // Enforces member auth requirement
protected Method $method = Method::POST;
// ...
}