10. Integracje
API
Wszystko, czego potrzebuje integracja, to JSON przez HTTPS w subdomenie firmy, z uwierzytelnieniem kluczem API utworzonym przez administratora i pokazanym tylko raz. Liczby dziesiętne są przesyłane jako napisy — liczby w JSON są zmiennoprzecinkowe, a ilości i kwoty takie nie są. Dokumentacja API wymienia wszystkie punkty końcowe.
Aplikacja używana przez wiele firm, taka jak Syncomatic, nie prosi o klucz: odsyła użytkownika do Foudry, użytkownik się loguje i na nią pozwala, a ona dostaje token, który działa jako ten użytkownik i jest widoczny w Connected apps (połączone aplikacje), gdzie każdy może odłączyć to, na co pozwolił.
Zasada projektowa obowiązująca wszędzie: API jest źródłem prawdy, a zapisy są ostrożne. Skrypty tworzą szkice, które zatwierdza człowiek; maszyny raportują, co zrobiły; nic spoza systemu nie może zaciągnąć zobowiązania finansowego ani wymyślić zapasu.
Dane niestandardowe
Każda część, stanowisko robocze i zlecenie produkcyjne ma nieprzezroczysty blok JSON, który system sprawdza, przechowuje i nigdy nie interpretuje. Służy integracjom: gdzie leży G-code drukowanej części, adres sieciowy drukarki, gęstość filamentu. Edytuj go na stronie Custom data (dane niestandardowe) danego obiektu albo przez API, a system niech pozostanie obojętny na to, co w nim jest.
Trzy schematy
ETL od dostawcy. Skrypt bierze eksport zamówienia dostawcy, rozwiązuje jego numery części przez GET /api/sourcing i wysyła szkic zamówienia przez POST /api/purchase-orders. Nieznane numery powodują odrzucenie całego żądania ze wskazaniem pozycji; przypisz je w źródłach zaopatrzenia i spróbuj ponownie. Po kilku zamówieniach twoja tabela źródeł zaopatrzenia staje się tabelą odpowiedników.
Maszyna, która coś wytwarza. Menedżer farmy drukarek odpytuje GET /api/workstations/{id}/next, gdy jego drukarka jest wolna, rozpoczyna operację, drukuje, kończy ją z ilością (a wkrótce także z rzeczywiście zużytym filamentem) i ustawia stanowisko jako wolne. Gdy potrzebuje człowieka, przechodzi w stan zablokowany i przekazuje zadanie przez PUT /api/tasks/{source}. Pełny projekt jest w repozytorium w docs/integrations/print-manager.
Pobieranie danych. System sprzedaży, który potrzebuje ilości, czyta GET /api/stock; pulpit gdzie indziej czyta GET /api/parts. Do zastosowań tylko do odczytu — klucze tylko do odczytu.
Powiadomienia
Webhooki to system wywołujący zewnętrzny adres, gdy coś się dzieje: zlecenie produkcyjne się kończy, zapas się zmienia. Administrator podaje URL i zdarzenia, które go interesują; każda wiadomość jest podpisana, ponawiana, gdy odbiorca nie działa, i zapisywana w dzienniku. Zdarzenie jest zapisywane w tej samej transakcji co zmiana, o której informuje, więc nic nie zostaje ogłoszone, jeśli się nie wydarzyło.
System, który zleca pracę i chce wiedzieć, kiedy jest gotowa. Centrum kontroli misji zleca serwis przez POST /api/work-orders, podając kadłub jako numer zewnętrzny zlecenia. Gdy ostatnia operacja zostanie zakończona, webhook work_order.completed odsyła ten numer, a jednostkę można przywrócić do służby. Foudra nigdy nie dowiaduje się, czym jest kadłub.
Odpytywanie nadal działa dla wszystkiego i zawsze daje poprawny wynik; webhook tylko usuwa czekanie.
Dalej: rytm pracy.