Before Scramble, keeping our API docs in sync meant remembering to manually update it when we made changes to our codebase, which often resulted in out of date docs. As Scramble is based on our code, our docs are always up to date and freeing our engineering team of a whole category of busywork.
use App\Data\JobData;use App\Data\JobPayloadData;use App\Http\Controllers\Controller;use App\Models\Company;use App\Models\Job;
class CompaniesJobsController extends Controller{ public function store(Company $company, JobPayloadData $jobPayload) { $job = Job::make($jobPayload);
$company->jobs()->save($job);
return JobData::from($job); }}use App\Enums\JobStatus;use Spatie\LaravelData\Attributes\MapName;use Spatie\LaravelData\Data;use Spatie\LaravelData\Mappers\SnakeCaseMapper;
#[MapName(SnakeCaseMapper::class)]class JobPayloadData extends Data{ public function __construct( public string $title, public JobStatus $status, /** @var array{int, int} */ public array $salaryRange, ) { }}use App\Enums\JobStatus;use Spatie\LaravelData\Attributes\MapName;use Spatie\LaravelData\Data;use Spatie\LaravelData\Lazy;use Spatie\LaravelData\Mappers\SnakeCaseMapper;
#[MapName(SnakeCaseMapper::class)]class JobData extends Data{ public function __construct( public int $id, public string $title, public JobStatus $status, /** @var array{int, int} */ public array $salaryRange, public Lazy|CompanyData $company, /** @var array{applications: int, rejections: int, approved: int} */ public Lazy|array $statistics, ) { }}
use App\Data\CompanyData;use App\Http\Controllers\Controller;use App\Models\Company;use Illuminate\Http\Request;use Spatie\LaravelData\PaginatedDataCollection;use Spatie\QueryBuilder\QueryBuilder;
class CompaniesController extends Controller{ public function index(Request $request) { $companies = QueryBuilder::for(Company::class) ->allowedFields(['id', 'name', 'jobs.id', 'jobs.title', 'created_at']) ->allowedFilters([ 'name', 'created_at', ]) ->allowedIncludes('jobs') ->allowedSorts([ 'name', 'created_at', ]) ->paginate($request->integer('per_page', 15));
return CompanyData::collect($companies, PaginatedDataCollection::class); }}
Scramble PRO has helped us build clear API documentation during the creation of our mobile app.
Support for Spatie's Laravel Data package makes Scramble PRO a must-have for developers that want to build strongly-typed API objects.
As early adopters, Roman was always quick to respond and ask for feedback.
Highly recommended!
Scramble PRO is amazing. It helps us move quickly and have a public API from day one! We finally have consistent typing between backend and the frontend.