ИТ развој

Pragmatic APIs: Designing Backend Bridges AI Can Actually Use

Прагматични API-ја: Дизајнирање на заднински мостови што вештачката интелигенција навистина може да ги користи

Повеќето API-а се дизајнирани за програмери кои можат да читаат документација, да ги испитуваат одговорите и да надоместат за двосмисленоста. Клиентите со AI не можат сигурно да направат ништо од тоа. Ним им е потребен интерфејс што го прави правилното дејство очигледно, ја потврдува намерата на границата и пријавува неуспех во форма што поддржува корисно повторување или исправка.

Тоа е вистинската работа на мостот кон AI бекенд: не да ја изложи секоја внатрешна можност, туку внимателно избран дел од системот да го претвори во сигурни, разбирливи операции.

Дизајнирајте за дејства, а не за табели во базата на податоци

Честа грешка при интеграција е директно изложување алатки во облик на CRUD над внатрешни ресурси: create_customer, update_invoice, delete_order. Овие имиња изгледаат ефикасно, но откриваат детали од имплементацијата и оставаат премногу простор за неточни комбинации на полиња.

Претпочитајте алатки што претставуваат целосно деловно дејство. Алатка со име issue_refund го пренесува својот исход, своите веројатни ограничувања и своето место во работниот тек. Таа може да прифати мал, намерно дефиниран облик на влез: идентификатор на нарачка, износ и причина. Мостот потоа може да ги спроведе правилата што инаку би биле расфрлани низ промптови, клиенти и процедури за поддршка.

  • Користете глаголи што го опишуваат деловниот исход.
  • Барајте идентификатори што се стабилни и недвосмислени.
  • Ограничете ги влезните полиња строго на дејството.
  • Враќајте ја добиената состојба, а не само ознака за успех.
  • Скријте ги внатрешните модели за складирање и топологијата на услугите.

AI не треба да знае дали нарачката се наоѓа во PostgreSQL, дали наплатата на плаќањето ја обработува друга услуга или кој настан се испраќа по поврат на средства. Треба да знае што може да побара и што се случило како резултат.

Направете ги договорите недвосмислено експлицитни

Природниот јазик е флексибилен; продукциските системи не треба да бидат. На секоја операција ѝ е потребен договор што одговара на основните прашања без потпирање на толкување: кои полиња се задолжителни, кој формат го користат, кои вредности се дозволени и што содржи успешниот резултат.

За PHP бекенд, валидацијата на барањето треба да се случи пред да се повика доменскиот код. Тоа спречува неправилниот AI излез да стане делумно извршен работен тек.

<?php

final class RefundRequest
{
    public function __construct(
        public readonly string $orderId,
        public readonly int $amountCents,
        public readonly string $reason,
    ) {}

    public static function fromArray(array $input): self
    {
        $orderId = $input['order_id'] ?? null;
        $amount = $input['amount_cents'] ?? null;
        $reason = $input['reason'] ?? null;

        if (!is_string($orderId) || $orderId === '') {
            throw new ValidationException('order_id must be a non-empty string.');
        }

        if (!is_int($amount) || $amount <= 0) {
            throw new ValidationException('amount_cents must be a positive integer.');
        }

        if (!is_string($reason) || trim($reason) === '') {
            throw new ValidationException('reason must be a non-empty string.');
        }

        return new self($orderId, $amount, trim($reason));
    }
}

Важниот детаљ не е конкретната PHP класа. Тоа е границата: надворешниот влез станува типизирана, валидирана команда пред да стигне до логиката за плаќања. Тоа го прави остатокот од системот полесен за тестирање, прегледување и менување.

Дајте им на грешките пат за опоравување

Грешка како „повратот на средства не успеа“ никому не му е корисна. Корисниот одговор при неуспех разликува лошо барање, ресурс што недостасува, конфликт со деловно правило и привремен проблем со зависност.

На пример, нарачка што не постои треба да врати стабилен машински читлив код и концизно објаснување. Поврат на средства поголем од наплатениот износ треба да го наведе дозволениот максимум. Истек на времето кај давател на плаќања треба јасно да покаже дека исходот може да е непознат и мора да се провери пред повторен обид.

Оваа разлика е важна затоа што повторните обиди не се секогаш безбедни. Повторувањето на читање обично е безопасно. Повторувањето на запишување по истек на времето може да создаде дупликат операција, освен ако крајната точка поддржува идемпотентност.

Користете идемпотентност за значајни запишувања

За дејства што преместуваат пари, создаваат резервации, испраќаат пораки или активираат обезбедување ресурси, прифатете клуч за идемпотентност. Зачувајте го клучот со завршениот резултат и вратете го тој резултат ако истото барање повторно се поднесе. Клучот треба да го генерира повикувачот за една наменета операција, а не да се користи повторно за неповрзани барања.

Во PHP апликација поткрепена со база на податоци, записот за идемпотентност и добиената доменска промена треба да се потврдат во истата трансакција секогаш кога е можно. Во спротивно, пад на процесот меѓу „запиши барање“ и „издај поврат на средства“ го остава системот неспособен да каже што се случило.

Кога работата мора да продолжи асинхроно, вратете идентификатор на задача и изложете посебна операција за статус. Не се преправајте дека задача ставена во ред е завршена. Јасните премини на состојба како queued, running, completed и failed се многу полесни за обработка и за луѓето и за AI клиентите.

Одржувајте ги алатките доволно мали за расудување

Една огромна универзална алатка често почнува со добри намери: една крајна точка, помалку интеграции, максимална флексибилност. Во пракса, таа станува збир од опционални полиња, меѓусебно исклучиви режими и недокументирани комбинации. Тоа е тешко за луѓето и кревко за AI.

Малите алатки не се нужно поедноставени. Фокусирана операција може да оркестрира трансакции, авторизација, ревизија, ставање во редици и повици кон надолни услуги зад стабилен договор. Интерфејсот останува компактен, додека имплементацијата може слободно да се развива.

Избирајте алатки околу кохерентни задачи, а потоа одолејте на додавањето опција само затоа што внатрешна услуга ја поддржува. Опција припаѓа во јавниот мост само кога претставува легитимна одлука на повикувачот и може јасно да се објасни.

Ставете ја авторизацијата во бекендот, а не во промптот

Упатствата можат да насочуваат AI, но не се систем за авторизација. Бекендот мора да го автентицира повикувачот, да го утврди неговиот закупец и дозволи и да спроведе контрола на пристапот за секое дејство. Никогаш не прифаќајте сметка, организација, улога или цена како авторитетни само затоа што пристигнале во аргумент на алатка.

Изведете го чувствителниот контекст од автентицираното барање. Евидентирајте кој го побарал дејството, кои валидирани параметри биле користени и кој доменски објект се променил. Избегнувајте евидентирање тајни, целосни податоци за плаќање или други податоци што не припаѓаат во оперативните дневници.

Можноста за ревизија е особено вредна кога AI дејствува како интерфејс. Таа го претвора прашањето „зошто се случи ова?“ од форензичка вежба во следливо барање и одлука.

Прво тестирајте ги незгодните патеки

Тестовите за среќниот пат докажуваат дека демонстрацијата работи. Довербата во продукција доаѓа од тестирање дупликат барања, истечени ингеренции, неправилно форматирани идентификатори, неуспеси при авторизација, делумни прекини на надолни услуги и повторни обиди по неизвесни исходи.

Тестовите на договори се особено ефикасни. Тие потврдуваат дека операцијата продолжува да прифаќа документирани влезови и да емитува документирани облици на одговор дури и кога внатрешниот код се менува. Комбинирајте ги со интеграциски тестови околу трансакции и надворешни адаптери, каде што обично се наоѓаат скапите неуспеси.

Прагматичниот AI мост не е разговорен слој залепен врз API. Тој е дисциплинирана граница: целисходни дејства, експлицитни договори, безбедни повторни обиди, спроводливи дозволи и искрена состојба. Изградете ја таа граница добро, и AI станува полесен за користење токму затоа што бекендот останува доверлив кога барањето е нецелосно, повторено или погрешно.

Портрет на автор на блогот

Mihajlo

Јас сум Михајло - развивач поттикнат од љубопитност, дисциплина и постојаната желба да создадам нешто значајно. Споделувам увиди, упатства и бесплатни услуги за да им помогнам на другите да ја поедностават својата работа и да растат во постојано развивачкиот свет на софтверот и вештачката интелигенција.