{"id":4544,"date":"2017-04-21T07:49:57","date_gmt":"2017-04-21T07:49:57","guid":{"rendered":"http:\/\/www.fmsdocumentation.com\/apis\/"},"modified":"2020-06-09T14:22:15","modified_gmt":"2020-06-09T11:22:15","slug":"apis","status":"publish","type":"page","link":"https:\/\/www.fmsdocumentation.com\/pl\/apis\/","title":{"rendered":"API"},"content":{"rendered":"<p>API (interfejs programowania aplikacji) umo\u017cliwia klientom integracj\u0119 systemu zarz\u0105dzania flot\u0105 (FMS) ze swoimi systemami oraz pobieranie i przesy\u0142anie danych o r\u00f3\u017cnych podmiotach.<\/p>\n<p>Klient wysy\u0142a \u017c\u0105dania HTTP do systemu, podaj\u0105c informacje o zamierzonym dzia\u0142aniu. Polecenia HTTP zazwyczaj stosowane w interfejsie API:<\/p>\n<ul>\n<li><strong>GET<\/strong> \u2013 odczyt zasobu;<\/li>\n<li><strong>POST<\/strong>\u2013 zmiana stanu zasobu;<\/li>\n<\/ul>\n<p>\u017b\u0105dana zawarto\u015b\u0107 jest dostarczana w formacie <strong>JSON<\/strong> z kodowaniem UTF-8. W przypadku zastosowania innego formatu, jest to okre\u015blone w opisie metody.<\/p>\n<p>Kod statusu HTTP to identyfikator statusu \u017c\u0105dania \u2013 w przypadku akceptacji \u017c\u0105dania zwracany kod to <strong>200<\/strong>. Wraz z t\u0105 odpowiedzi\u0105 otrzymywane s\u0105 \u017c\u0105dane informacje z serwera. Takie odpowiedzi b\u0119d\u0105 si\u0119 r\u00f3\u017cni\u0107, w zale\u017cno\u015bci od typu wykorzystywanego interfejsu API. Odpowiedzi interfejsu API dla r\u00f3\u017cnych typ\u00f3w API opisano w odpowiednich rozdzia\u0142ach.<\/p>\n<p>W przypadku wyst\u0105pienia b\u0142\u0119du wys\u0142anego \u017c\u0105dania, system odpowie komunikatem zwrotnym zawieraj\u0105cym kod statusu.\u00a0 Typowe kody b\u0142\u0119d\u00f3w:<\/p>\n<ul>\n<li><strong>Kod 400<\/strong> \u2013 Bad request (nieprawid\u0142owe \u017c\u0105danie) \u2013 \u017c\u0105danie API nie zosta\u0142o rozpoznane.<\/li>\n<li><strong>Kod 401<\/strong> \u2013 Unauthorized (nieouprawnione) \u2013 oznacza, \u017ce brakuje po\u015bwiadcze\u0144 uwierzytelniaj\u0105cych lub s\u0105 one niepoprawne;<\/li>\n<li><strong>Kod 403<\/strong> \u2013 Forbidden (zabronione) \u2013 oznacza, \u017ce klient nie ma uprawnie\u0144 dost\u0119pu do \u017c\u0105danego zasobu lub wykonania \u017c\u0105danego dzia\u0142ania;<\/li>\n<li><strong>Kod 404<\/strong> \u2013 Not found (nie odnaleziono) \u2013 oznacza, \u017ce \u017c\u0105dany zas\u00f3b nie zosta\u0142 odnaleziony.<\/li>\n<li><strong>Code 500\u00a0<\/strong>\u2013 Internal server error \u2013 b\u0142\u0105d wewn\u0119trzny serwera, skontaktuj si\u0119 z pomoc\u0105 techniczn\u0105 dostawcy.<\/li>\n<\/ul>\n<p>Kody b\u0142\u0119d\u00f3w dostarczaj\u0105 og\u00f3lnych informacji o rodzaju b\u0142\u0119du, umo\u017cliwiaj\u0105c u\u017cytkownikowi identyfikacj\u0119 \u017ar\u00f3d\u0142a problemu.<\/p>\n<p>Niekt\u00f3re interfejsy API posiadaj\u0105 w swoich komunikatach zwrotnych opcjonalne elementy (parametry), kt\u00f3re system mo\u017ce z r\u00f3\u017cnych powod\u00f3w pomija\u0107 (brak danych, z\u0142e dane, czas odpowiedzi itp.). U\u017cytkownik nie mo\u017ce zak\u0142ada\u0107, \u017ce komunikat zwrotny b\u0119dzie zawsze zawiera\u0107 okre\u015blone dane opcjonalne.<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<h3>Ograniczenia interfejsu API<\/h3>\n<p>Wszystkie interfejsy API maj\u0105 jedno ograniczenie:<\/p>\n<ul>\n<li>Maksymalna liczba przetwarzanych \u017c\u0105da\u0144 to 1000 na minut\u0119.<\/li>\n<\/ul>\n<p>To ograniczenie dotyczy wszystkich istniej\u0105cych interfejs\u00f3w API systemu zarz\u0105dzania flot\u0105 (FMS).<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<h3>Uwierzytelnianie API<\/h3>\n<p>Uwierzytelnianie i autoryzacja API s\u0105 konieczne do kontrolowania wykorzystania interfejs\u00f3w API przez poszczeg\u00f3lnych klient\u00f3w oraz ich integracji z r\u00f3\u017cnymi systemami. Aby wysy\u0142a\u0107 autoryzowane \u017c\u0105dania do systemowych interfejs\u00f3w API, aplikacja wysy\u0142aj\u0105ca zapytania musi w imieniu u\u017cytkownika systemu uzyska\u0107 klucz API <strong>API_key<\/strong>.<\/p>\n<p>Jedynym sposobem na uzyskanie klucza API przez klient\u00f3w jest bezpo\u015bredni kontakt z dzia\u0142em wsparcia technicznego dostawcy us\u0142ug. Klucz API sk\u0142ada si\u0119 z losowo generowanych liter, cyfr i symboli.<\/p>\n<p>Przyk\u0142ad \u017c\u0105dania wykorzystuj\u0105cego klucz_API:<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.fmsdocumentation.com\/wp-content\/uploads\/2017\/04\/1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-589 size-full\" src=\"https:\/\/www.fmsdocumentation.com\/wp-content\/uploads\/2017\/04\/1.png\" alt=\"\" width=\"672\" height=\"92\" srcset=\"https:\/\/www.fmsdocumentation.com\/wp-content\/uploads\/2017\/04\/1.png 672w, https:\/\/www.fmsdocumentation.com\/wp-content\/uploads\/2017\/04\/1-300x41.png 300w\" sizes=\"auto, (max-width: 672px) 100vw, 672px\" \/><\/a><\/p>\n<p>Je\u015bli klucz interfejsu API wygas\u0142, zosta\u0142 usuni\u0119ty lub po prostu wy\u0142\u0105czony, system zwr\u00f3ci nast\u0119puj\u0105c\u0105 odpowied\u017a:<\/p>\n<p><a href=\"https:\/\/www.fmsdocumentation.com\/wp-content\/uploads\/2017\/04\/2-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-590 size-full\" src=\"https:\/\/www.fmsdocumentation.com\/wp-content\/uploads\/2017\/04\/2-1.png\" alt=\"\" width=\"416\" height=\"72\" srcset=\"https:\/\/www.fmsdocumentation.com\/wp-content\/uploads\/2017\/04\/2-1.png 416w, https:\/\/www.fmsdocumentation.com\/wp-content\/uploads\/2017\/04\/2-1-300x52.png 300w\" sizes=\"auto, (max-width: 416px) 100vw, 416px\" \/><\/a><\/p>\n<p>Punkty ko\u0144cowe interfejsu API, parametry \u017c\u0105dania i komunikaty zwrotne mo\u017cna przegl\u0105da\u0107 przy pomocy edytora \u201eSwagger\u201d za po\u015brednictwem: <a href=\"https:\/\/api.fm-track.com\/swagger-ui.html\">https:\/\/api.fm-track.com<\/a><\/p>\n<p style=\"background-color: #2e67b1;color: #ffffff;padding-left: 10px;padding-right: 10px\"><p class=\"note\">Uwaga<br \/>\nWszystkie typy API wymagaj\u0105 okre\u015blenia wersji interfejsu API.<\/p><\/p>\n<p style=\"background-color: #2e67b1;color: #ffffff;padding-left: 10px;padding-right: 10px\"><p class=\"note\">Wa\u017cne!<br \/>\nW zwi\u0105zku z ci\u0105g\u0142ym rozwojem zar\u00f3wno interfejsu API, jak i systemu z kt\u00f3rego pobiera on informacje, u\u017cytkownicy mog\u0105 niekiedy otrzymywa\u0107 parametry niewymienione w opisach. Nieznane parametry, nieudokumentowane w opisach poszczeg\u00f3lnych interfejs\u00f3w API, zaleca si\u0119 po prostu ignorowa\u0107.<\/p><\/p>\n<hr \/>\n<h3>Wersjonowanie i zgodno\u015b\u0107<\/h3>\n<p>W zwi\u0105zku z tym, \u017ce rozwi\u0105zanie API jest stale aktualizowane, ulepszane i odpowiednio modyfikowane, konieczne jest wyja\u015bnienie poj\u0119cia \u201eZgodno\u015bci\u201d i tego, jak wp\u0142ywa na ona u\u017cytkowanie interfejsu API.<\/p>\n<p>Po aktualizacji interfejsu API nast\u0119puje jedna z dw\u00f3ch poni\u017cszychopcji:<\/p>\n<ul>\n<li>Interfejs API jest wstecznie kompatybilny \u2013 oznacza to, \u017ce wprowadzone zmiany w \u017caden spos\u00f3b nie wp\u0142yn\u0105 na funkcjonowanie interfejsu API i tym samym nie powstanie nowa wersja.<\/li>\n<li>Interfejs API nie jest kompatybilny wstecz \u2013 oznacza to, \u017ce spos\u00f3b funkcjonowania niekt\u00f3rych komponent\u00f3w interfejsu API zosta\u0142 zmieniony. W takim wypadku publikowana jest nowa wersja interfejsu API.<\/li>\n<\/ul>\n<p>Wersja interfejsu API mo\u017ce zosta\u0107 uznana za wstecznie kompatybiln\u0105, je\u015bli:<\/p>\n<ul>\n<li>Dodano nowy zas\u00f3b API.<\/li>\n<li>Do istniej\u0105cego interfejsu API dodano nowe parametry opcjonalne \u017c\u0105dania.<\/li>\n<li>Do istniej\u0105cych komunikat\u00f3w zwrotnych API dodano nowe parametry \u017c\u0105dania.<\/li>\n<li>W istniej\u0105cych komunikatach zwrotnych interfejsu API zmieniono kolejno\u015b\u0107 w\u0142a\u015bciwo\u015bci.<\/li>\n<li>Zmiana d\u0142ugo\u015bci lub formatu identyfikator\u00f3w obiekt\u00f3w lub inne nieprzejrzyste ci\u0105gi.<br \/>\nMo\u017cna bezpiecznie zak\u0142ada\u0107, \u017ce identyfikatory obiekt\u00f3w generowane przez system nie b\u0119d\u0105 przekracza\u0107 255 znak\u00f3w, natomiast u\u017cytkownik powinien by\u0107 w stanie obs\u0142ugiwa\u0107 identyfikatory o potencjalnej d\u0142ugo\u015bci 255 znak\u00f3w. Na przyk\u0142ad, gdy u\u017cytkownik wykorzystuje MySQL, identyfikatory powinny by\u0107 przechowywane w kolumnie VARCHAR (255) COLLATE utf8_bin (konfiguracja COLLATE zapewnia rozr\u00f3\u017cnianie wielko\u015bci liter w wyszukiwaniu).<\/li>\n<li>Dodanie nowych wyliczeniowych typ\u00f3w danych (ENUM). \u2013 ka\u017cdy system powinien bez wi\u0119kszych problem\u00f3w obs\u0142ugiwa\u0107 wszelkie nieznane typy danych ENUM. Na przyk\u0142ad, zmiana zestawu typ\u00f3w z [Prywatne, Biznesowe] na [Prywatne, Praca, Biznes], nie powinna mie\u0107 \u017cadnego wp\u0142ywu na system.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<hr \/>\n<p><div class=\"alignleft\"><a href=\"https:\/\/www.fmsdocumentation.com\/pl\/eco-driving-menu\/analysis-by-driver\/\" title=\"Analiza wed\u0142ug kierowc\u00f3w\"><span class=\"arrow\">\u2039 &nbsp <\/span> Analiza wed\u0142ug kierowc\u00f3w <\/a><\/div> <div class=\"alignright\"><a href=\"https:\/\/www.fmsdocumentation.com\/pl\/apis\/history-api\/\" title=\"API historycznych wsp\u00f3\u0142p\u00f3\u0142rz\u0119z\u0119ddnych obiektu\">API historycznych wsp\u00f3\u0142p\u00f3\u0142rz\u0119z\u0119ddnych obiektu <span class=\"arrow\"> &nbsp\u203a <\/span> <\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>API (interfejs programowania aplikacji) umo\u017cliwia klientom integracj\u0119 systemu zarz\u0105dzania flot\u0105 (FMS) ze swoimi systemami oraz pobieranie i przesy\u0142anie danych o r\u00f3\u017cnych podmiotach. Klient wysy\u0142a \u017c\u0105dania HTTP do systemu, podaj\u0105c informacje o zamierzonym dzia\u0142aniu. Polecenia HTTP zazwyczaj stosowane w interfejsie API: GET \u2013 odczyt zasobu; POST\u2013 zmiana stanu zasobu; \u017b\u0105dana zawarto\u015b\u0107 jest dostarczana w formacie JSON &hellip; <a href=\"https:\/\/www.fmsdocumentation.com\/pl\/apis\/\" class=\"more-link\">Czytaj dalej <span class=\"screen-reader-text\">API<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":116,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-4544","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.fmsdocumentation.com\/pl\/wp-json\/wp\/v2\/pages\/4544","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fmsdocumentation.com\/pl\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.fmsdocumentation.com\/pl\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.fmsdocumentation.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fmsdocumentation.com\/pl\/wp-json\/wp\/v2\/comments?post=4544"}],"version-history":[{"count":1,"href":"https:\/\/www.fmsdocumentation.com\/pl\/wp-json\/wp\/v2\/pages\/4544\/revisions"}],"predecessor-version":[{"id":4926,"href":"https:\/\/www.fmsdocumentation.com\/pl\/wp-json\/wp\/v2\/pages\/4544\/revisions\/4926"}],"wp:attachment":[{"href":"https:\/\/www.fmsdocumentation.com\/pl\/wp-json\/wp\/v2\/media?parent=4544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}