Disclaimer: Na wstępie chciałem ostrzec, że tekst dotyczy moich kontaktów z InFaktem, który to serwis z racji umowy wiążącej mnie z Mirumee niektórzy mogą uznać za moją konkurencję.

Cenimy InFakt (i mówiąc my nie mam na myśli ja, właściciel CentrumFaktur, do czego jeszcze dojdziemy). Mamy również pełną świadomość tego, że sporo firm właśnie ich wybrało do wystawiania faktur. Udawanie, że jest inaczej, mijałoby się z celem. Tyle tytułem wstępu.

Pojawili się pierwsi użytkownicy CentrumFaktur i razem z nimi pierwsze życzenia. Zupełnie nie byliśmy zdziwieni, kiedy ktoś wskazał na API InFaktu, prosząc o dodanie możliwości importu danych. Dostałem link do dokumentacji, dostałem dane dostępowe do konta, zabrałem się do pracy.

Zaczęło się od dokumentacji, czy może raczej dokumentacji. Plik PDF ma bowiem 3,5 strony i przedstawia cały interfejs w pięciu prostych punktach. Akcent na słowo prostych pada celowo, gdyż autorowi udało się pominąć wiele jakże nudnych kwestii technicznych, skupiając się na szlifowaniu swego kunsztu literackiego.

Chciałem niniejszym nominować API InFaktu do następujących wyróżnień:

  • Pierwsza dokumentacja API w XML, która nie zawiera ani jednego znaku < — to zadziwiające, ale autorowi udało się opisać aplikację XML bez choćby wspominania jej schematu.
  • Pierwsza dokumentacja API, gdzie strukturę XML zapisano w postaci tablicy mieszającej PHP Rubiego — to również nie żart, spodziewam się, że wersja 0.7 w ramach dywersyfikacji wprowadzi również JSON i YAML.
  • Jedyna dokumentacja API, gdzie prawie wszystkie nazwy elementów zostały podane błędnie — autor, choć zapomniał o udokumentowaniu struktury, przytacza nazwy elementów w rodzaju <nazwa_firmy/>, zupełnie nie przeszkadza mu fakt, że w rzeczywistości element ten to <nazwa-firmy/>.
  • Jedyne API, które do dostępu wymaga, oprócz klucza, podania loginu i hasła — czemu nie chcemy używać loginu i hasła w dostępie do API? Aby w razie czego łatwo i bez ryzyka odciąć dany program. Zatem wprowadźmy klucze i wtedy wystarczy zmienić klucz, a autor aplikacji, nie znając loginu i hasła… wróć, o szit, o szit, o fak.

Zamiast sensownego opisu, mamy dokumentację przez implementację. Dokumentację postanowiłem zatem w skrócie nazywać doku. W skrócie od do kurwy nędzy. Cóż, przynajmniej nie użyli SOAP (którego to protokołu nazwa słusznie sugeruje rozkosze kojarzone ze schylaniem się pod prysznicem). Bywa i tak, damy radę. Rach-ciach-ciach i… dupa.

401 Unauthorized

No nie wierzę, że nie umiem w trzech linijkach zrobić Basic Auth.

Sprawdzam ponownie, kod wygląda ok — podać login i hasło-sklejone-z-kluczem do modułu autoryzacji, wywołać GET, wydrukować wynik (a potem napisać sobie samemu dokumentację schematu). Biorę przykład InFaktu, napisany w PHP (z własnym klientem HTTP, stworzonym w technologii Copiego-Paste'a, włącznie). Zmieniam login, zmieniam hasło, zmieniam klucz. Uruchamiam, dupa. Mam już dwie dupy i wciąż ani jednego klienta, żyć nie umierać.

Pytam na Blipie, tu zaczęła się prawdziwa przygoda. Zaczęło się dość sympatycznie:

Tak to jest jak konkurencja czyta API:-) Powiedz co dokładnie Ci nie działa

InFakt, Blip

Po chwili odbijania piłeczki (nie lubimy nieczystej gry) dowiedziałem się, że jestem właścicielem CentrumFaktur. Otóż nie jestem, jakkolwiek by się przy tym nie upierać, właścicielem Portfeo i CentrumFaktur jest Mirumee. Na pieczątce, którą mam przed sobą, stoi Mirumee Software, Mirosław Mencel. Ja najbliżej literki M byłem, gdy nadawano mi drugie imię Michał, którego jednak nie używam.

Wszelkie próby dogadania się na szczeblu technicznym (ze wskazaniem na fakt, że nie naruszam regulaminu InFaktu włącznie) spełzły na niczym. Dyskusja na poziomie a my i tak wiemy lepiej, Balcerowicz musi odejść.

Wreszcie rozmowa przeradza się w rasowy flejm ze stosowną argumentacją w komplecie:

Brawo!! Mamy pełny obraz :-) Przygotowujecie kopię Infakt, nasyłacie kolegów do czarnego pr i uważacie że infakt jest be. Bomba

InFakt, Blip

Otóż wierzcie mi Państwo, że w obliczu zastanego profesjonalizmu, czarny PR rozdaję całkiem charytatywnie. Trochę pokory, panowie. Faktycznie, InFakt mocno przyczynił się do powstania CentrumFaktur. Byłem przy tym, to wiem. A skoro wiem, to opowiem.

Pracowałem ci ja sobie spokojnie nad Portfeo, kiedy to zaistniała w ekipie Portfeo potrzeba regularnego wystawiania faktur VAT. Wobec tego Mirek bez zastanowienia (idąc za głosem rekomendacji) założył konto na InFakcie (w jakże doskonale zakamuflowanej domenie portfeo.infakt.pl, co dowodzi naszego przebiegłego szpiegostwa). Po paru próbach użycia okazało się, że serwis nie spełnia jego oczekiwań i zaproponował mi kontrakt na stworzenie alternatywy. Dwa podpisy później konto na InFakcie wyszło z użycia.

Ot i cała historia inspiracji, jakiej dostarczył nam InFakt. Historie o kopiowaniu interfejsu czy możliwości proponuję włożyć między bajki. Trochę pokory, do bajek wrócimy, kiedy w przyszłym roku InFakt udostępni moduł ofertowania. Co zaś się tyczy inspiracji, to wzorowaliśmy się na Ballparku i nie wstydzimy się tego zupełnie — wszak jeśli się uczyć, to od lepszych od siebie.

Koniec końców zdawało się, że wczoraj sytuacja się unormowała. API InFaktu zaczęło magicznie działać (bez zmian w kodzie z mojej strony), więc uznałem, że z administratora zeszło ciśnienie i nas odblokował. Dziś jednak cyrk zaczął się na nowo, a do mnie wpadły (między innymi) takie wiadomości:

Ujawniliśmy publicznie Wasze nieetyczne zachowanie. Próbujecie wykorzystać nasze API do transferu Klientów. Żałosne ale prawdziwe.

InFakt, Blip

Infakt udostepnił API publicznie, nikomu nie blokuje dostępu, nawet Wam, tym którzy szukają drogi na skróty w zdobywaniu Klientów

InFakt, Blip

Nie mam pojęcia, kto we wspomnianym wcześniej serwisie operuje kontem ^infakt, ale z całą pewnością nie przysługuje się wizerunkowi firmy. Gdybym był złośliwy, to napisałbym, że limit 160 znaków sugeruje, że może to być autor dokumentacji. Ale nie jestem, prawda?

Drogi użytkowniku ^infakt, spieszę poinformować, że twoja logika nie trzyma się kupy. W jakiż to sposób CentrumFaktur miałoby ukraść wam użytkowników? Emaksem przez sendmejla (potrójna ścianka ognia) zdobyć wszystkie loginy i hasła, wygenerować klucze API i dokonać migracji na siłę? No bo, proszę ja was, po mojemu to dane klientów i faktury są własnością firmy, a nie InFaktu i user ma prawo je sobie migrować gdzie chce.

Wersja dla opornych: użytkownicy muszą najpierw samodzielnie założyć konto w CentrumFaktur, następnie wpisać z własnej nieprzymuszonej woli dane do logowania i nacisnąć przycisk Importuj. Nikt tu nikogo pod pistoletem nie trzyma. Kiedy skończę pracować nad API CentrumFaktur, będziecie mile widzianym jego konsumentem.

Apeluję zatem: trochę dystansu. CentrumFaktur z pewnością daleko jest do ideału, ale nie widziałem, żeby Mirek z tego powodu naskakiwał na krytyków. Wasze API aż prosi się o sensowną dokumentację i pozbycie się loginów i haseł (co na Blipie sugerowałem równie grzecznie, co bezskutecznie). Mam również nadzieję, że pracownicy InFaktu będą łaskawi zejść wreszcie z moich pleców, bo wierzcie mi, że licytację na techniczne niedoróbki można kontynuować, ale nie przyjdzie to z zyskiem dla żadnej ze stron.