Daha çox

GeoServer REST API-də (PHP) Layer Stilinin dəyişdirilməsi


REST vasitəsilə təbəqənin tərzini dəyişdirmək istərdim. Problemim REST vasitəsilə stil dəyişdirildikdən sonra aktiv edilməyən Layer dəstlərinə çox oxşardır. və Geoserver-də istirahət api istifadə edərək layın standart tərzini necə qurmaq olar.

Buruq işlərlə aşağıdakıları işlətmək:

curl.exe -v -u istifadəçi: parol -XPUT -H "Məzmun tipi: mətn / xml" -d "poi"http: // localhost: 8080 / geoserver / istirahəti / qat / iş sahəsi: qat

Buna baxmayaraq, GeoServer REST API ilə qarşılıqlı əlaqə qurmaq üçün IBM tərəfindən verilən PHP-də GeoServerWrapper üzərində qururam, buna görə kodum aşağıdakı kimidir:

xüsusi funksiya runApi ($ apiPath, $ method = 'GET', $ data = ", $ contentType = 'text / xml') {$ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ this-> serverUrl. ' istirahət /'.$ apiPath); curl_setopt ($ ch, CURLOPT_USERPWD, $ this-> username. ":". $ this-> password); if ($ method == 'POST') {curl_setopt ($ ch, CURLOPT_POST, true); curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ data);} else if ($ method == 'DELETE' || $ method == 'PUT') {// return $ method; curl_setopt ($ ch, CURLOPT_CUSTOMREQUEST, $ metod);} əgər ($ data! = ") {curl_setopt ($ ch, CURLOPT_HTTPHEADER, array (" Content-Type: $ contentType ", 'Content-Length:' .strlen ($ data))); } curl_setopt ($ ch, CURLOPT_HEADER, yalnış); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, doğru); $ rslt = curl_exec ($ ch); $ info = curl_getinfo ($ ch); if ($ info ['http_code'] == 401) {return 'Giriş rədd edildi. Giriş etimadnaməsini yoxlayın. '; } başqa {return $ rslt; }} public function addStyleToLayer ($ layerName, $ workspaceName, $ styleName) {return $ this-> runApi ('layer /'. urlencode ($ workspaceName). ':'. urlencode ($ layerName). ", 'PUT', ''.htmlentities ($ styleName, ENT_COMPAT).'doğru'); }

'PUT' yazmaq işə yaramadı, buna görə yenidən rəsm lövhələrinə qayıtdım.


Bu parametrləri GeoServer REST-ə göndərirəm:

$ .ajax ({url: 'geoserverRestFinal.php', yazın: 'PUT', data: {'action': 'assignedstyle', 'username': $ ('# username'). val (), 'password': $ ('# parol'). val (), 'iş sahəsi': $ ('# assignedstyle_workspace'). val (), 'layer': $ ('# assignedstyle_layer'). val (), 'stylename': $ ( '#assignstyle_stylename'). val ()}, müvəffəqiyyət: function (ret) {$ ('# assignedstyle_results'). html (escape (ret) .replace (/% (…) / g, "& # x $ 1;" ));}});

'Fəaliyyət' parametrindən:

if (isset ($ _ REQUEST ['action'])) {{"GeoserverWrapper.php" daxil edin; $ geoserver = yeni GeoserverWrapper ('http: // server: 8080 / geoserver /', $ _REQUEST ['username'], $ _REQUEST ['password']); keçid ($ _REQUEST ['action']) {case 'assignedstyle': print_r ($ geoserver-> addStyleToLayer ($ _ REQUEST ['layer'], $ _REQUEST ['workspace'], $ _REQUEST ['stylename'])); fasilə; } qayıt;}

JQuery Ajax zəngim məlumatlarımı Query Strs kimi deyil, Form Data kimi göndərir.

Cari:

http: //server/php/geoserverRestFinal.php

Form Data əməliyyatı: assignedstyle istifadəçi adı: istifadəçi parolu: parol iş sahəsi: geoportal qat: glocalidad stylename: point

Olmalıdır:

http: //server/php/geoserverRestFinal.php? action = assignedstyle & username = user & password = password & workspace = geoportal & layer = glocalidad & stylename = point

JQuery.params-a baxırıq


isteğe bağlı. bu, geoserver v2.3.0-da mövcud qat qatını dəyişdirmək üçün php funksiyasıdır.

Fasilə bildirərək bunu həll etdim ki, $ params, geoserverdə chang üslubundan sonra təbəqəni aktivləşdirmək üçün "true" qoymalıdır.

function change_layer_style ($ url_layer, $ style_name) {$ params = ''. $ style_name.'doğru'; $ ch = curl_init (); curl_setopt ($ ch, CURLOPT_URL, $ url_layer); curl_setopt ($ ch, CURLOPT_HTTPHEADER, Array ("Məzmun Tipi: text / xml")); curl_setopt ($ ch, CURLOPT_CUSTOMREQUEST, "PUT"); curl_setopt ($ ch, CURLOPT_USERPWD, "user: password"); // geoserver. curl_setopt ($ ch, CURLOPT_POSTFIELDS, $ params); curl_setopt ($ ch, CURLOPT_RETURNTRANSFER, doğru); // Server cavabını alın ... $ response = curl_exec ($ ch); curl_close ($ ch); return $ response; } // -> necə istifadə ediləcək. // -> 1. geoserver url-nizi konfiqurasiya edin. $ your_workspace = "xxx"; $ your_layer_name = = "bbb"; $ url_layer = "http://xxxx.co.uk:8080/geoserver/rest/layers/".$your_workspace.":".$your_layer_name; $ style_name = "your_exist_style_name"; // -> yuxarıdakı funksiyanı çağırın. change_layer_style ($ url_layer, $ style_name);

API və frontend-backend arasındakı fərq

"Standart" bir iş veb saytı yazmağa çalışıram. "Standart" dedikdə, bu saytın adi HTML5, CSS və Javascript-i ön tərəf üçün, arxa tərəfi (işləmək üçün) işlədir və verilənlər bazası üçün MySQL-i işlədir. Əsas bir CRUD saytıdır: ön tərəf, verilənlər bazasında saxladığı hər şeyi istifadəçinin verilənlər bazasına istifadəçi nə daxil etsə və bir az işləyərsə yazır. Oradakı əksər saytlar kimi.

Kodlaşdırmağa başlamaq üçün Github depolarımı yaratarkən, arasındakı fərqi anlamadığımı başa düşdüm ön uc,API. Sualımı ifadə etməyin başqa bir yolu: API bu şəkilə haradan gəlir?

Daha çox təfərrüatları və sonra verdiyim sualları sadalayacağam - inşallah bu, mənim uşaqlarınıza həqiqi sualım barədə daha yaxşı bir fikir verəcəkdir, çünki verəcəyim konkret sualı bilmirəm.

  • Model-View-Controller modelini sınamaq istəyirəm. Bunun sualı / cavabı dəyişdirib dəyişdirmədiyini bilmirəm.
  • API RESTful olacaqdır
  • Arxa tərəfin aldadılmasına və xüsusi sorğu çağırmasına icazə vermək əvəzinə öz ucumdan öz API istifadə etməyimi istərdim. Bu üslubun daha uyğun olduğunu düşünürəm.
  • Ön uç API çağıran arxa tərəfi çağırır? Yoxsa ön uç arxa tərəfi çağırmaq əvəzinə API çağırır?
  • Arxa tərəf yalnız bir API icra edirmi və API nəzarəti arxa tərəfə qaytarır (arxa tərəf son nəzarətçi rolunu oynayaraq tapşırıqları verərək)?

API-nin ön ucun yanında rolunu izah edən uzun və ətraflı cavablar tövsiyə olunur. Cavab proqramlaşdırma modelindən asılıdırsa (Model-View-Controller modelindən başqa modellər), xahiş edirəm API-nin bu düşüncə tərzlərini təsvir edin. Təşəkkürlər. Çox qarışıqam.


GeoServer

Bu sabit 2.2 seriyasının son versiyasıdır və bəzi kiçik yeni xüsusiyyətlər və maraqlı düzəlişlər ehtiva edir:
* [http://jira.codehaus.org/browse/GEOS-3885] - REST API vasitəsilə Freemarker şablonlarını yeniləyin
* [http://jira.codehaus.org/browse/GEOS-5325] - LayerGroupInfo-ya başlıq və abstrakt əlavə edin
* [http://jira.codehaus.org/browse/GEOS-5462] - İstifadənin ləğvi altında göstərici mövzu əbədi olaraq bloklana bilər.
* [http://jira.codehaus.org/browse/GEOS-5479] - Sənədləşmədə səhv: & lt / Literal & gt yerinə & lt / PropertyName & gt etiketi istifadə edilmişdir
* [http://jira.codehaus.org/browse/GEOS-5483] - WPS uzantısında json çıxışı kitabxana itkin olduğu üçün işləmir
* [http://jira.codehaus.org/browse/GEOS-5485] - Tək zolaqlı (elmi) raster məlumatları yenidən tərtib edərkən sərhəd əsərləri. daha çox oxu

GeoServer xəbərlərini axtarırsınız? Blog.geoserver.org saytına baxın

GeoServer ilə əlaqəli ən son xəbərləri və yenilikləri axtarırsınızsa, http://blog.geoserver.org saytındakı GeoServer blogunu oxuyun. Əlbəttə ki, yükləmələr burada SourceForge-da hələ də yerləşdirilir, lakin xəbərlərimizi birdən çox yerdə saxlamaqdansa, GeoServer blogunda birləşdiririk. Əsas GeoServer ana səhifəsi http://geoserver.org saytında qalır. Gəlin bizə qoşulun!

WCS ilə GeoServer 1.4.0-M2 buraxıldı

Bu versiya Java 1.4.2+, GeoTools 2.3.0-M0, JAI 1.1.4+ və ImageIO 1.1+ ilə işləyir.

ArcGrid modulu bu buraxılışda yaxşı işləmir, çünki yenisi, hamısı yenidən işlənmiş və əsaslı və ImagioIO interfeysləri 2.4.x versiyasından bəri Geotools-da mövcuddur.

Növbəti buraxılışda ArcGrids və GRIB'lar və bir çox başqa plagin olacaqdır :)

Http://geoserver.org - yeni ana səhifə!

GeoServer, daha əvvəl köhnə postnuke səhifəmizin etibar etdiyi mysql 3 üçün dəstəyi ataraq sourceforge tərəfindən hazırlanan yeni bir ana səhifə əldə etdi. Bir müddətdir vikiyə köçürmə prosesindəyik və bitməyə yaxınıq. Həqiqi wikinin yeri bir qədər qəribədir, buna görə sizi doğru istiqamətə yönəltmək üçün http://geoserver.org istifadə etməyə qərar verdik. Tezliklə biz bu domenin özünü sümük halına gətirəcəyik. Ancaq yeni səhifəyə baxın və bizə rəy verin, yoxsa işlər səhvdir, sadəcə özünüz düzəldin!

GeoServer 1.0.0 buraxıldı

GeoServer, OpenGIS Konsorsiumunun Veb Feature Server spesifikasiyasının tam bir əməliyyat Java (J2EE) tətbiqidir. Release 1.0.0 rəsmi OGC WFS test mühərriki ilə tamamilə sınaqdan keçirildi və Postgis, Oracle və Shapefile formatlarını dəstəkləyir. Zəhmət olmasa http://geoserver.sf.net saytına daxil olun

GeoServer, başqa bir əla sourceforge layihəsi olan GeoTools-un ən son beta versiyasının (http://geotools.org) üstündə incə bir servlet təbəqəsi olaraq inşa edilmişdir. Server, istifadəçilərə GML istifadə edərək coğrafi məlumatları paylaşma imkanı verir. GeoServer əvvəlcə PostgreSQL-in məkan uzantısı olan Postgis-in üstündə yazılmışdı və indi hər gün daha çox gəlməklə Shapefile və Oracle Spatial formatlarını dəstəkləyir. Tamamilə əməliyyatdır, yəni istifadəçilər vebdəki yeniləmə və kilidləmə əməliyyatlarından istifadə edərək arxa məlumatlarını dəyişdirə bilərlər. Xüsusiyyət süzgəci, arxa tərəfdəki məlumat mağazalarında mümkün olduğu sürət üçün tam olaraq dəstəklənir. . daha çox oxu

Garmin GPS Aləti Taşındı

Garmin GPS Tool və kitabxanaların http://garmingpstool.sourceforge.net saytında yeni bir evi var.

FreeFS və Geoserver Birləşməsi

FreeFS və Geoserver layihələri yaxşı coğrafi data proqramı yaratmaqla eyni hədəflərə doğru çalışdıqları üçün layihələri birləşdirməyə qərar verdik. Daha çox məlumat olduğu üçün daha çox məlumat göndərəcəyəm.

Dekabr Qeydləri

Layihə ilə bağlı bir neçə qeyd.

1. FreeFS və MapBuilder layihələri ilə əlaqə qurdum və onlarla elektron poçt dialoqundan sonra GDTP sintaksisini OpenGIS-in WFS-i ilə daha çox uyğunlaşdırmaq üçün işləyirəm. Heç bir şəkildə başa çatmağa yaxın deyil, amma yeniləmələri dərc etdirəcəyəm.

2. Gdtp2svg və Layihə Xəritələri bölmələrində bəzi Beş Blues Gölü məlumatlarını yüklədim. Cilalanmamışdan uzaqdırlar, lakin bir qədər irəliləməyi təmsil edirlər. daha çox oxu

Geoserver v.0.85 buraxılışı

Geoserver layihəsi coğrafi və Xəritəçəkmə tətbiqetmələri üçün açıq bir müştəri-server spesifikasiyası standartının yaradılmasına yönəlmişdir.

Beləliklə, nəhayət üzərində işlədiyim Geoserver istinad server kodunu buraxmağa başladım. Src / qovluğundakı Java mənbəyi və sənədlər / qovluqdakı quraşdırma sənədləri ilə bir .tar.gz. Serverə sorğuların necə edildiyini və hansı nəticələri gözlədiyini göstərmək üçün eyni zamanda "GDTP İstifadəçi Kılavuzu" da buraxdım. daha çox oxu

Forumlar açıqdır

Anonim bir istifadəçinin istəyi ilə forumları istifadə üçün açdım. Layihə haqqında orada fikir bildirməkdən çəkinməyin.

(Xüsusiyyətlərdə işləməyə qayıdın.)

Coğrafi Məlumat Sunucusu: Milestone 2 Tamamlandı

Geoserver layihəsi coğrafi və Xəritəçəkmə tətbiqetmələri üçün açıq bir müştəri-server spesifikasiyası standartının yaradılmasına yönəldilmişdir.

Veriləndən beş gün sonra, Milestone 2 artıq CVS-də. Host və şəbəkə giriş nəzarət siyahılarını dəstəkləyir və CVS-də ən son 'Nümunə Queries.txt' sənədində göstərildiyi kimi limitedRequest tələb növünü dəstəkləyir. Əsas növləri də müəyyən edilmişdir. GML 2.0 obyektlərinin əksəriyyəti serverdə əsas növlər kimi tətbiq edilmişdir. Daha yaxşı sənədlər yazılana qədər daha çox məlumat üçün 'db.dump' faylına baxın.

Şərhlər Progress (Milestone 3)

Geoserver layihəsi ilə bağlı işlərin necə getdiyi barədə bir neçə qeyd buraxacağımı düşünürdüm.

Hər şeydən əvvəl, Milestone 3 ilə əlaqədardır. İstifadəçi dəstəyi ən son CVS versiyalarına daxil edildi. Bu anda Geoserver sferasında bir istifadəçi hesabınız varsa, sənəd tələb etmək üçün özünüzü doğrulamaq üçün bu hesabdan istifadə edə bilərsiniz deməkdir. (Bu anda istifadəçi yaratmaq üçün heç bir vasitə olmadığını unutmayın. Tezliklə.) Əsasən işləmə yolu budur. Verilənlər bazasındakı hər bir xüsusiyyətin 'istifadəçilər' cədvəlindəki bir istifadəçi identifikatoruna uyğun bir 'Sahibi' sahəsi var (Sahib olmadığı təqdirdə 0). Başqa bir istifadəçiyə məxsus xüsusiyyətləri görmək istəyirsinizsə, həmin istifadəçi kimi daxil olmalısınız. (Nümunələr 'Nümunə Queries.txt' sənədindədir.) '0' sahibi olan xüsusiyyətlər hər kəs üçün açıqdır. Bu quraşdırma heç bir şəkildə tamamlanmış deyil, çünki daha çox Unix kimi ACL-lər əlavə etmək niyyətindəyəm, amma bu bir başlanğıcdır. Doğrulamanın bir növ problem cavab sxemindən istifadə etməsini və ya serverdən təhlükəsizliyi yaxşılaşdırmaq üçün parol kodlamaq üçün istifadə olunan təsadüfi bir açar yaratmasını da düşünürəm. Hələ heç bir şeyə qərar verilməyib və bunlar versiya 2.0 xüsusiyyətləri ola bilər. Hazırda istifadəçi adı və şifrə aydın mətn şəklində göndərilir. Və bu anda qrup anlayışları yoxdur. Beləliklə, xülasə olaraq, bu layihənin istifadəçi / qrup sahələri sabitliyə yaxın hesab olunmadan əvvəl bir az daha çox iş tələb edir. daha çox oxu

Tərəqqi

Milestone 1 CVS ağacındadır. Yalnız xüsusi xüsusiyyətləri görmək üçün alətlərdən məhrumdur. Serverimdə oynamaq üçün həqiqi bir məlumat kütləsi olduqda bu tamamlanacaq.

Milestone 2, bu həftə sonu keçirdiyim pis bir əməliyyat sistemi sinif tapşırığına görə (bir fayl sistemi yazmaq) cədvəldən geri qaldı. Hal hazırda davam edir və bu həftənin əvvəlində tamamlanmalıdır.

Mərhələ 3 və 4 əvvəllər qeyd edildiyi kimi planlaşdırılır.

Mərhələlər

1.0 beta olmayan server mövcud olmamışdan əvvəl server mərhələsinin buraxılış cədvəli:

Milestone One: Xüsusiyyət tələb etmək və xüsusiyyət əlavə etmək kimi əsas xüsusiyyətlər səhv kodları ilə birlikdə dəstəklənəcəkdir. Veb əsaslı idarəetmə konsolu hələ də yarımçıq qalacaq, lakin istifadəçilərə serverə icazə verilən növləri əlavə etməyə və serverdə yerləşən bəzi xüsusiyyətlərə göz atmağa imkan verəcəkdir. Bu veb əsaslı materialları səviyyəyə gətirən kimi bu axşam daha sonra yayımlanmalıdır. daha çox oxu

Layihə yeniləməsi

Geoserver layihəsi canlıdır və sürətlə irəliləyir. Əsas hissədə bir neçə proqram buraxılışına baxmayaraq, server kodu sıx aktiv inkişaf mərhələsindədir. Veb əsaslı interfeys tamamlanır və daxili sənədlər yazılır. Kiçik nümunə müştəriləri olan serverin ümumi bir beta versiyası 4 Noyabr tarixinədək yayımlanmalıdır. Əlavə müştərilər hazırlanır və gələcəkdə mövcudluğu barədə bir elan veriləcək.

Yay Hesabatı

Proqramla yay işi yaxşı getdi. Beş Blues Gölünün xəritələri hazırlandı və Garmin kitabxanalarını istifadə edərək kənar qruplarla əməkdaşlıq inkişaf etdirildi. Bundan əlavə, DLE hatası düzəldildi və ən son nüsxələr artıq CVS anbarındadır. Bundan əlavə, bir XML - & gt xəritə proqramının başlanğıcları formalaşır.

Yay Pre-Release mövcuddur

Garmin GPS Java kitabxanası ümumi istifadə üçün hazırlanmışdır. Bu, inkişaf etməkdə olan bir məhsulun erkən yayımlanmasıdır, buna görə də öz riskinizdə istifadə edin. Paketdə bir sıra böcək var (ən başlıcası, kiçik bir cəmi cəmi), lakin paketdəki funksiyalar çox vaxt işləyir.

Bu buraxılış bu vaxta qədər hazırlanmış mənbə kodunu ictimaiyyətə təqdim etmək üçün hazırlanır. Kodu və ya CVS ağacını yeniləmək üçün sentyabr ayının əvvəlinə qədər heç bir dəyişiklik edilməyəcək, çünki yerli bir parkı müəyyənləşdirmək üçün kodu istifadə edərək Belizdə olacağam (sənədlər bölməsindəki məlumatlar). Sentyabr ayında qayıtdıqdan sonra CVS ağacı yayda edilən dəyişikliklərlə yenilənəcəkdir. Narahatçılığa görə üzr istəyirəm, amma yaxın iki ay ərzində İnternetə qoşulmayacağam. daha çox oxu

Garmin GPS Tərəqqi

Garmin GPS protokolu tətbiqi hazırda davam edir. Final kimi şeylərə görə temp 19 May 2000-ə qədər olduqca yavaş olacaq.

Buna baxmayaraq, Console Java tətbiqetməsində davamlı irəliləyiş əldə edilir və Garmin link qat protokol tətbiqi demək olar ki, başa çatmışdır və ehtimal ki, bu həftənin sonunda və ya gələn həftənin əvvəllərində sınaqdan keçiriləcəkdir.


ArcGIS REST API ilə güclü proqramlar yaradın.

Coğrafi kodlaşdırma, marşrutlaşdırma və amp istiqamətləri və məkan təhlili daxil olmaqla birbaşa ArcGIS yer xidmətlərinə daxil olun.

Başlamaq

ArcGIS REST API-ləri ilə bir proqram yaratmaq üçün dərsliklərdən istifadə edin.

Yerə əsaslanan xidmətlər

Ünvanları və yerləri, marşrutlaşdırma və istiqamətləri və toplu coğrafi kodlamanı axtarın.

Xidmətlər İstinad

Məkan təhlili, GeoEnrichment, yüksəklik və offline xəritə iş axınları daxil olmaqla bütün ArcGIS xidmətlərinə daxil olun.

İstifadəçilər, qruplar və məhsullar

ArcGIS Online və ya ArcGIS Enterprise qruplarını, istifadəçilərini və maddələrini idarə etmək üçün ArcGIS xidmətləri.

Müəssisə İdarəsi

ArcGIS Enterprise üçün jurnallardan sorğu vermək və ya xidmətlər və məlumat mağazalarını idarə etmək daxil olmaqla ümumi tapşırıqları yerinə yetirin.


3 Cavablar 3

REST arxitekturası, serverin müştərinin vəziyyətini saxlamadığı, lakin obyektlərin vəziyyətinin irəli və geri ötürüldüyü mənada vətəndaşlığı yoxdur. Nəticədə, REST nümayəndəlik deməkdir Dövlət Transferi. Beləliklə, REST-in Layer 5 - Sessiya Layer-ə aid olduğunu düşünürəm, bu, ümumiyyətlə iki qovşaq arasında çoxlu geri və irəli ötürmə şəklində davamlı məlumat mübadiləsinin olduğu qat kimi təsvir olunur.

REST API-nin OSI Modelinin Layer 6 və ya Layer 7-ə necə aid ola biləcəyini görmək çətindir. Təqdimat təbəqəsi, köçürüləcək məlumatların təqdimat forması və ya sintaksisinin müzakirəsini təmin edir. Ümumiyyətlə xarakter kodlaşdırması (UTF, ASCII), məlumat şifrələməsi və şifrənin açılması kimi mexanizmlər təqdimat qatının bir hissəsidir. Tətbiq qatında son istifadəçi proseslərini dəstəkləyən FTP, HTTP, Telnet kimi tətbiqetmə xüsusi xidmətləri təqdim olunur.


4 Cavablar 4

Server API-ni ifşa edir və müştəri ondan istifadə edir.

Məsələn, Twitter-də bölüşmək istədiyi məlumatlar var (digər şeylər arasında Tweets), buna görə də bir REST serverinin xidmət etdiyi bir API-ni ifşa edir (hər ehtimala görə bir neçə). Tvitləri əldə etmək və bir istifadəçiyə təqdim etmək üçün həmin API-dən istifadə edən bir mobil tətbiq yazmaq istəyirsənsə, mobil tətbiqetmənin REST müştərisi olacaqdır.

Bunu düşünməyin ən asan yolu budur:

Server və müştəri haqqında danışarkən, həmişə müzakirə etdiyiniz kodla əlaqəlidir. Veb serverinin istəkləri cavablandırdığı kod həmişə server hissəsidir. Veb server ilə əlaqə quran kod həmişə müştəridir.

@Paul və @Berin cavablarından əlavə, çox düzgün və qısadır.

İndi REST serverinin və REST müştərisinin mənası nə olduğunu araşdırdım, amma yaxşı bir cavab tapa bilmədim. Kimsə onları izah edə bilərmi?

  • RESTful serverlər və müştərilər bunlardır Roy Fielding tərəfindən doktorluq dissertasiyasında tətbiq olunan memarlıq məhdudiyyətlərini arxitekturada tətbiq edən tətbiqetmələr və WWW vasitəsilə işləyə bilər.

Bir az daha uzun cavab

RESTful server (tətbiqetmə) bacarıqlı tətbiqetmələrdir təmin etmək bizimlə resurslarbu mənbələrin idarə olunması üstündə WWW işə götürmək HTTP xüsusiyyətləri rabitə protokolu kimi.

RESTful müştəri (tətbiqetmə) bacarıqlı tətbiqetmələrdir istehlak etməkresurslarla işləmək RESTful serverlər tərəfindən məruz qalır, eyni binanın altında.

Leonard Richardson və Samy Ruby, bütün bu binaları və məhdudiyyətləri əhatə edən bir memarlıq üslubunu tapdılar. Resurs Odaklı Memarlıq (kitab). REST tətbiqetmələrinin (API və xidmətlər) təfsiri cəmiyyət tərəfindən geniş şəkildə qəbul edilmiş və bu mövzuya dair kitabların, blogların və məqalələrin yayılmasını təşviq etmişdir. Hamısını bir araya gətirərək, Fielding dissertasiyası.

RESTful tətbiqetmələrin fərqliliyi

Orada, RESTful tətbiqetmələrin vəhşi bazarında, həqiqət Fielding məhdudiyyətlərini tamamilə yerinə yetirmədikləri zaman RESTful olduqlarını iddia edən tətbiqləri görəcəyik. 1

REST-in bütün memarlıq məhdudiyyətlərini yerinə yetirmək alış-verişdən azad deyil. İcma bu məhdudiyyətləri tətbiq etdiyi anda müəyyən dərəcədə rahatlıq qəbul etməli oldu. Həmişə olduğu kimi, uyğunluq və maliyet-fayda məsələsidir.

Məhdudiyyətlər arasında Vahid interfeys digərlərindən fərqlənir. Bu məhdudiyyət xüsusilə aktualdır, çünki bizi HTTP semantikasını və məzmununu işə salmağa məcbur edir təmsil edən işimiz (xidmətlər, modellər və s.) RESTful şəkildə. 2

REST-in hər bir tətbiqi layihədən proyektə və provayderdən provayderə fərqli olaraq fərqlənir. Hər birinin fərqli tələblər, ehtiyaclar və qaynaqlar ilə məşğul olması lazım olduğu üçün başa düşüləndir. Nəticədə, tələblər və ehtiyaclar qalanlardan üstündür.

1: Yəni RESTful deyillər? Bu mübahisələrə və fikirlərə açıqdır. Hər iki mövzu da mövzudan kənar.

2: İşin gözləntilərini uğurla qarşılamaq üçün URI-lərin, Http Metodlarının, Http Statusunun və s.-nin necə uğurla tətbiq olunacağına dair SE və SO-da çox sayda məqalə, bələdçi və ya sual çox vacibdir.

İndi REST serverinin və REST müştərisinin mənası nə olduğunu araşdırdım, amma yaxşı bir cavab tapa bilmədim. Kimsə onları izah edə bilərmi?

Şübhə yarandıqda mənbəyə müraciət edin: REST memarlıq üslubunu təyin etdiyi Fieldingin dissertasiyası.

Fəsil 5-də Client-Server-i məhdudiyyətlərdən birincisi kimi təsvir edir.

Narahatlıqların ayrılması müştəri-server məhdudiyyətlərinin arxasındakı prinsipdir. İstifadəçi interfeysi ilə əlaqəli məlumatları məlumatların saxlanması ilə əlaqələndirərək bir çox platformada istifadəçi interfeysinin daşınma qabiliyyətini yaxşılaşdırırıq və server komponentlərini sadələşdirərək miqyaslılığı artırırıq. Ancaq İnternet üçün bəlkə də ən əhəmiyyətlisi, ayrılmanın komponentlərin müstəqil inkişafına imkan verməsi və bununla da çoxsaylı təşkilati sahələrin İnternet miqyaslı tələbini dəstəkləməsidir.

Client-Server memarlıq üslubunun təsviri Fielding-in Gregory Andrews-a aid etdiyi 3-cü Fəsildədir

Müştəri bir serverin reaktiv bir proses olduğu tetikleyici bir prosesdir. Müştərilər serverlərdən gələn reaksiyalara səbəb olan istəklər edirlər. Beləliklə, müştəri seçdiyi vaxtlarda fəaliyyətə başlayır, sonra tələbi yerinə yetirilənə qədər gecikir. Digər tərəfdən, bir server istəklərin edilməsini gözləyir və sonra onlara cavab verir. Server ümumiyyətlə sona çatmayan bir prosesdir və çox vaxt birdən çox müştəriyə xidmət göstərir.

Bir sözlə, bir REST müştərisi və bir REST server hər ikisi də bağlayıcıdır

İkisi arasındakı əsas fərq, bir müştərinin sorğu edərək ünsiyyəti başlatmasıdır, bir server isə xidmətlərinə giriş təmin etmək üçün əlaqələri dinləyir və istəklərə cavab verir. Bir komponent həm müştəri, həm də server bağlayıcılarını əhatə edə bilər.

Qeyd edək ki, Fielding tərifində müəyyən dərəcədə dəqiqdir, oynadığı rolları təsvir etmək üçün termin komponentlərindən istifadə edir.

Bir istifadəçi agenti bir sorğu başlatmaq üçün bir müştəri bağlayıcıdan istifadə edir və cavabın son alıcısı olur. Ən ümumi nümunə veb brauzerdir.

Bir mənşəli server, tələb olunan bir qaynaq üçün ad sahəsini idarə etmək üçün bir server bağlayıcıdan istifadə edir. Bu, öz mənbələrinin təqdimatı üçün qəti mənbəyidir və öz mənbələrinin dəyərini dəyişdirmək istəyən hər hansı bir sorğunun əsas alıcısı olmalıdır.

Vasitəçi komponentlər həm müştəri, həm də server rolunu oynayır.

Ümumi danışıqda, REST müştərisini istifadəçi agenti komponenti və REST serverini mənşə server komponenti mənasında başa düşdüyünü düşünürəm.


Misal raster¶

Aşağıdakı nümunələrdə istifadə olunan raster qatı qondarma bir dünya üçün yüksəklik məlumatlarını ehtiva edir. Verilər EPSG: 4326 (uzunluq / enlem) içində saxlanılır və 70 ilə 256 arasında bir məlumat aralığına sahibdir. Minimum dəyərlərin qara rəngə və maksimum dəyərlərin ağ rəngə sahib olduğu boz rəngdə göstərilərsə, raster belə görünür:

Rast faylını boz rəngdə göstərildiyi kimi


GeoServer Layers üçün Varsayılan Keşləmə Seçimləri¶

Bu bölmə, GeoServer-də kafel önbelleği üçün müxtəlif defoltların konfiqurasiyasını və digər qlobal seçimləri təsvir edir.

Hər yeni qat və ya qat qrupu üçün bir GeoWebCache qatını avtomatik olaraq konfiqurasiya edin¶

Varsayılan olaraq aktivləşdirilmiş bu parametr, GeoServer-dəki qatların yerləşmiş GeoWebCache vasitəsilə necə idarə olunduğunu təyin edir. Bu ayar aktiv edildikdə, GeoSebutucunda yeni bir qat və ya qat qrupu dərc edildikdə GeoWebCache qat siyahısında bir giriş yaradılacaqdır. GeoWebCache kataloqunu sinxronlaşdırmaq üçün bu ayarı istifadə edin. (Bu, standart olaraq aktivdir.)

Varsayılan olmayan üslubları avtomatik olaraq önbelleğe alın

Varsayılan olaraq, yalnız müəyyən bir qat üçün standart tərzdən istifadə edən istəklər önbelleğe alınacaqdır. Bu ayar aktiv edildikdə, müəyyən bir qat üçün bütün istəklər, hətta standart olmayan bir stil istifadə edənlər də önbelleğe alınacaqdır. Bunun aradan qaldırılması disk yerinin problem olduğu və ya yalnız bir standart tərzin vacib olduğu hallarda faydalı ola bilər.

Varsayılan metil ölçüsü¶

Metatile daha böyük birinə birləşdirilmiş bir neçə plitələrdir. Bu daha böyük metatil istehsal olunur və sonra standart plitələr kimi geri qaytarılmadan (və önbelleğe alınmadan) əvvəl bölünür. Metatiling istifadə üstünlüyü bir etiketin və ya həndəsənin kəsilmiş və ya dəyişdirilə bilən bir çini sərhədində yerləşdiyi vəziyyətlərdədir. Metatiling ilə, bu kafel kənar problemləri böyük dərəcədə azalır.

Üstəlik, metatilizasiya ilə, tək bir plitələrlə tam bir xəritə göstərməklə müqayisə edildikdə, əksər hallarda cache toxum üçün lazım olan ümumi vaxt azalır. Əslində, daha böyük metatiling amillərindən istifadə etmək, cache toxumuna sərf olunan vaxtı azaltmaq üçün yaxşı bir yoldur.

Metatilingin dezavantajı böyük ölçülərdə yaddaş istehlakının problem ola bilməsi.

Varsayılan metilin ölçüsü burada tənzimlənə bilər. Varsayılan olaraq, GeoServer bir metatil ölçüsü təyin edir 4x4Bu, performans, yaddaş istifadəsi və göstərmə dəqiqliyi arasında bir tarazlıq yaradır.

Varsayılan kanalizasiya ölçüsü¶

Kanalın ölçüsü bir çini istehsal edərkən istifadə olunan əlavə yerin miqdarını (piksellə) təyin edir. Çini sərhəddə olduğuna görə səhv göstərilmədiyi etiketlər və xüsusiyyətlərdəki problemləri azaltmaq üçün bunu metatlarla birlikdə istifadə edin.

Varsayılan Keş Formatları¶

Bu parametr, kirəmitli istəklər edildikdə önbelleğe alınacaq standart şəkil formatlarını təyin edir. Plitələrə qənaət edərkən istifadə edilə bilən dörd şəkil formatı var:

Varsayılan parametrlər vektor təbəqələrinə, raster qatlarına və qat qruplarına bölünür. Üç növ təbəqənin hər biri üçün yuxarıdakı dörd formatdan birini seçə bilərsiniz. Bu təbəqə / format birləşmələrinin xaricində qalan istəklər, GeoServer vasitəsilə göndərildiyi təqdirdə önbelleğe alınmayacaq və GeoWebCache son nöqtələrinə göndərildikdə bir səhv qaytaracaqdır.

Bu varsayılanlar, təbəqə xüsusiyyətlərini redaktə edərkən hər təbəqə üzərində yazıla bilər.

Yaddaş BlobStore Seçimlərində¶

Bu seçimlər GeoWebCache üçün Yaddaş Önbelleğini aktivləşdirmək / söndürmək üçün istifadə olunur. Bu xüsusiyyət, GWC plitələrinin birbaşa yaddaşa yazılması, sürətli bir məlumat alınması üçün istifadə edilə bilər.

Aktiv edin¶

Bu parametr yaddaş yaddaşında aktivləşdirməyə və ya silməyə imkan verir. Varsayılan olaraq deaktivdir.

Davamlılıqdan çəkinin¶

Bu parametr, bütün GWC plitələrini yalnız yaddaşda saxlayaraq fayl sistemindəki hər hansı bir faylın qeyd olunmasının qarşısını almaq üçün istifadə edilə bilər. Varsayılan olaraq deaktivdir.

Mövcud Cache¶

Bu parametr, yaddaş yaddaşında hansı Cache metodundan istifadə edilə biləcəyini müəyyənləşdirir. Varsayılan olaraq, Guava Caching istifadə olunur. Bir önbelleğe alma metodu, HazelCast kimi GeoServer başlanğıcında dəyişməz bir konfiqurasiya tələb edərsə, unutmayın Sərt Yaddaş limiti, Evdən çıxarılma qaydası, Evdən çıxma vaxtıParalellik səviyyəsi parametrlər deaktivdir.

Yeni bir Cache obyektinin konfiqurasiyasına dair daha çox məlumatı GeoWebCache Konfiqurasiya səhifəsində tapa bilərsiniz.

Cache Hard Memory limit (Mb) ¶

MB yaddaş yaddaşının həcmində konfiqurasiya üçün parametr.

Keşdən azad etmə siyasəti¶

Yaddaş önbelleğini azad etmə siyasətində konfiqurasiya üçün parametr, bunlar ola bilər: LRU, LFU, EXPIRE_AFTER_WRITE, EXPIRE_AFTER_ACCESS, NULL

Bu evakuasiya siyasətləri, bütün önbellek tətbiqetmələri tərəfindən dəstəklənə bilməz. Məsələn, Guava Caching yalnız evakuasiya siyasətlərini dəstəkləyir: EXPIRE_AFTER_WRITE, EXPIRE_AFTER_ACCESS və NULL.

Qeyd edək ki, istifadəçi interfeysində yalnız seçilmiş önbellek tərəfindən qəbul edilən azad etmə qaydaları göstəriləcəkdir.

Keşdən çıxarılma vaxtı (saniyələrlə) ¶

Yaddaş yaddaşının boşaldılma vaxtında konfiqurasiya üçün parametr. Saniyələrdədir.

Qeyd edək ki, bu parametr, dövri olaraq önbellek təmizləməsini həyata keçirən bir daxili mövzu konfiqurasiyası üçün də istifadə olunur.

Keş Paralelliyi Səviyyə¶

Yaddaş cache paralelliyində konfiqurasiya üçün parametr.

Yaddaş yaddaşında təmizləyin¶

Yaddaş öncəsindəki bütün plitələri təmizləmək üçün düymə.

Keş Statistikası¶

Yaddaş yaddaşı ilə əlaqəli müxtəlif statistika parametrləri.

Cache Statistikasını Yeniləyin¶

Yuxarıda göstərilən cache statistikasını yeniləmək üçün düymə. Yaddaş önbelleğinde paylandığı təqdirdə də statistika həmişə yerli önbelleğe alınmış girişlərlə əlaqəlidir

Bəzi önbelleğin bütün statistika parametrlərini təmin etmədiyini unutmayın, bu halda istifadəçi yalnız görəcəkdir "Əlçatan deyil" bu parametrlər üçün.

Yaddaş BlobStore Seçimlərində

Qeyd edək ki TileCaching hər Layer üçün nişanı seçin, seçdiyiniz Layer üçün yaddaş önbelleğini aradan qaldırmağa qərar verə bilərsiniz Bu təbəqə üçün yaddaş yaddaşında aktivləşdirin onay qutusu. Bu seçim, bu xüsusiyyəti dəstəkləməyən önbellekler üçün deaktiv edilmişdir.

Defolt Keşlənmiş Izgaralar¶

Bu bölüm önbelleğe alınmış təbəqələr üçün avtomatik olaraq konfiqurasiya ediləcək ızgaraları göstərir. Mövcud bəzi əvvəlcədən qurulmuş ızgaralar olsa da, yalnız ikisi varsayılan olaraq aktivdir. Bunlar ən ümumi və universal hallara uyğundur:

EPSG: 22 maksimum zoom səviyyəsinə və 256x256 piksel plitələrə sahib 4326 (coğrafi)

EPSG: 900913 (sferik Mercator), 31 maksimum zoom səviyyəsinə və 256x256 piksel plitələrə malikdir

Əvvəlcədən mövcud olan bir grid dəsti əlavə etmək üçün, Varsayılan grid setini əlavə et menyusundan seçin və Əlavə et (əlavə işarəsi olan yaşıl dairə) düyməsini basın.


WMS versiyaları arasındakı fərqlər¶

1.1.1 və 1.3.0 versiyaları arasındakı əsas fərqlər bunlardır:

1.1.1-də, EPSG ad məkanı ilə göstərilən coğrafi koordinat sistemlərinin uzunluq / enlik oxu sırasına sahib olması müəyyən edilmişdir. 1.3.0-da sifariş enlik / boyundur. Daha ətraflı məlumat üçün aşağıdakı Eksen Sifarişinə baxın.

GetMap əməliyyatında srs parametri 1.3.0-da crs adlanır. GeoServer, versiyasından asılı olmayaraq hər iki düyməni dəstəkləyir.

GetFeatureInfo əməliyyatında x və y parametrlərinə 1.3.0-da i və j deyilir. GeoServer, CITE uyğunluq rejimində olduğu müddət istisna olmaqla, versiyasından asılı olmayaraq hər iki düyməni dəstəkləyir.


API dizaynı nədir?

API dizaynı, inkişaf etdiricilər və istifadəçilər tərəfindən istifadəsi üçün məlumatları və tətbiqetmə funksiyalarını ifşa edən tətbiqetmə proqramlaşdırma interfeyslərinin (API) inkişafı prosesinə aiddir. API, müasir təşkilatlar üçün vacibdir, fəaliyyətlərindən və məhsullarından ortaqlıq strategiyalarına qədər hər şeyə yeni imkanlar əlavə edir. Artıq əksər təşkilatların API proqramlarında iştirak edib etməyəcəyini istəmədiklərini, ancaq bunu necə edəcəyimizi söyləmək artıq bir şey deyil.

Effektiv bir API proqramı, bir təşkilatın əsas korporativ strategiyasına əsaslanmalı və hədəflərinə töhfə verməlidir. Aşağıdakı 3 suala aydın şəkildə cavab verə bildiyiniz zaman əla bir strategiya hazırladığınızı biləcəksiniz:

  1. Niyə API tətbiq etmək istəyirik?
  2. Bu API ilə hansı konkret nəticələr əldə etmək istəyirik?
  3. Buna nail olmaq üçün API proqramını necə icra etməyi planlaşdırırıq?

Niyə

İnsanlar tez-tez bu sualı müxtəlif yollarla səhv yozurlar. Birincisi, API dəyərinə diqqət yetirmək əvəzinə, -nin dəyərini düşünmək faydalıdır effekt API-nin. Unutmayın, mütləq API deyil, dəyərli olan təşkilatın əsas işidir. API, bir təşkilatın təqdim etdiyi mövcud dəyərə yeni giriş növləri təmin edən bir kanal halına gəldikdə dəyərlidir.

Başqa bir yalnış təsəvvür, API-nin dəyərli istifadəçi olması üçün bunun üçün pul ödəməyə hazır olmalıdır. Bu, yalnız API özü məhsul olduqda doğrudur. Əksər modellərdə bu belə deyil. API-lər ümumiyyətlə bəzi digər metrikləri idarə edir - satışlar, iştirakçılara yönəltmələr, marka məlumatlılığı və s. API istifadəçilər üçün dəyəri result of an API call (service request and response), rather than the call itself.

The most common business drivers for establishing an API program, according to a survey of 152 organizations conducted by the Cutter Consortium and Wipro, are to develop new partnerships, to increase revenue, to exploit new business models, to improve time to market, and to develop new distribution channels. The top technology drivers are to improve application integration, improve mobile integration, and support the connection to more devices. The benefits to the organization need to be strong enough to make the decision to invest in the APIs an obvious choice for the organization.

The what

The second question should be "What concrete outcomes do we want to achieve with these APIs?" In other words, "What do the APIs actually do and what impact do they have on the wider business strategy?"

Both the concepts of the internal view and the external view of an organization can help to define the what of the API. The internal view refers to specific, valuable assets an organization possesses. The more valuable and unique the services and resources offered the more suitable they are for an API program.

An organization that has unique data could take advantage of this resource by allowing access to the data via API. Unique content, data, and services can make access to the API extremely valuable.

When deciding what an API should do for a business, both internal and external views
need to be examined. The decision about the what is then usually a combination of the 2 views.

In concrete terms, while the niyə is unlikely to change often, the what may vary significantly based on external factors—such as markets, technical considerations, or economic conditions. Internal directions about the value of an asset may change, which could also affect what should be achieved with an API.

The how

The final question, "How do we design our API program to achieve what we want?" is all about implementation and execution.

Teams must ask themselves:

  • What technology is used to build the APIs?
  • How are the APIs designed?
  • How are the APIs maintained?
  • How are the APIs promoted inside the organization or marketed to the outside world?
  • What resources are available?
  • Who should be on the team?
  • How do we track success against the business goals that have been set?

The API team

An API team is most closely related to a "product" team—whether your customers are internal or external, you are in charge of building, deploying, operating, and optimizing the infrastructure others depend on.

Just like product teams, API teams can also be very diverse, but typically they should include a product-centric person who acts as the keeper of strategy and goals, design-focused team members who ensure best practice in API design, engineers who put the API technology in place, and operations team members who will run the API.

Over time you may also have additional people involved, including support and community team members, API evangelists, security representatives, and others.

John Musser highlighted 5 "keys" to a great API in his 2012 talk at the O’Reilly Open Source convention:

  1. Provide a valuable service
  2. Have a plan and a business model
  3. Make it simple, flexible, and easily adopted
  4. It should be managed and measured
  5. Provide great developer support

The first key, provide a valuable service, is especially important when thinking about the niyə of your API program The value proposition is the main driver for success of the API. If an API has the wrong value proposition (or none at all) it will be very difficult or impossible to find users.

Almost any company with an existing product, digital or physical, can generate value
through an API, if that API links to existing offerings and enhances them. As long as the API is structured in a way that covers meaningful use cases for developers, it will deliver value.

What does this mean for your APIs?

Finding and describing the value of your API is an iterative process. The first step is describing jobs your users are trying to get done. Misal üçün:

  • Automatically sending urgent communications to team members in an emergency
  • Backing up critical files to ensure they are never lost
  • Collecting sample data to detect certain events

The next step is identifying particular challenges that affect users before, during, or after trying to get a job done:

  • Ensuring the reliability of sending with multiple tries, detecting failures, worrying about many messages being sent rather than just one, and integrating with different message delivery systems depending on the location of the user
  • Ensuring the safe delivery of files, but also minimizing the amount of transfer bandwidth
  • Dealing with massive amounts of data and attempting to correlate it in real time

The third step is to summarize the potential gains a user could achieve:

  • Sending other types of notifications, which create opportunity rather than warn of threat
  • Getting rid of other storage equipment if reliability meets your needs
  • Automatically triggering actions based on the events

When examining these pain points, think broadly and list things like support, documentation, or developer portals—everything that a customer could use. Next, outline how you intend to eliminate or reduce some of the things that may be annoying to API users before, during, or after trying to complete a job—or issues that prevent them from doing so. Then describe how you intend to create gains of any sort for your API users.

Through engaging in this process, our 3 examples above might result in:

  • A multichannel messaging API with a single call to deliver messages and the ability to retry automatically until arrival is guaranteed (e.g., Twilio, PagerDuty).
  • A storage synchronization API with optimized calls to efficiently check if new versions should be synchronized (e.g., Bitcasa, Box).
  • An API aggregating several data sources into a configurable stream, which could be filtered, sampled, and easily manipulated (e.g., GNIP, DataSift).

Finally, a useful clarification exercise is to compose several statements that make the fit between the API and the user profile clear. If you find it hard to identify such fit statements, then the API model needs to be reconsidered. Maybe there are API features which need to be added, revised, refined, or eliminated. It could also be that your API does offer great value, but you are trying to address the wrong type of users.

When you condense and abstract your fit statements into one overarching statement, it becomes your value proposition for your APIs. In the case of the messaging API above this might be something like:

In some cases you might think "This seems like too much work. We’re just creating an internal API." However, focussing on value is key, even in internal use cases. A poorly determined value proposition will lead to difficulty pitching the value of the API to other teams. A well-defined value proposition can help ease adoption and make the API program a key contributor to the business.

To help define your own API program’s value, consider these 5 questions:

  1. Who is the user? This question should be answered in terms of their relationship to you (are they existing customers, partners, external developers), their role (are they data scientists, mobile developers, operations people) and their requirements or preferences.
  2. What user pains are we solving and/or what gains are we creating for the user? This question should be answered in relationship to the customer’s business, challenges and gains defined by the value proposition, and whether or not a critical need is being fulfilled (is it a pain point, is it a revenue opportunity), and what metric is being improved for the user (speed, revenue, cost saving, being able to do something new).
  3. Which use cases are supported with your API? Identify, with the help of the value proposition, the solutions to your user’s challenges or opportunities created by the API that are most effective your organization and the user. Plan your API to address these use cases.
  4. How can the value for the user be expanded over time? Plan your value proposition with future changes in mind. What are important upcoming milestones relating to internal or external changes?
  5. What value is being created for your organization internally? Consider internal benefits and how the API can be of value within the business.

Make the business model clear from the beginning

Being able to articulate the value of an API is an important milestone in designing your API-based program. However, APIs also generate cost and this consideration should be balanced by value. While the value may not be measured in monetary terms, it must be real, for example:

  • What is the existing core business of the organization?
  • How an API can be used to accelerate or augment this business?

In some cases APIs can lead to entirely new business opportunities outside of the existing business model of an organization. Even in these cases, APIs generally use existing assets or expertise to create opportunities in new ways.

In summary, there are 3 reasons why determining the right business model is important for designing effective API programs:

  1. Determining the right business model brings the value of the API to the organization into focus, which drives the decision regarding long-term commitments to the API program. Without that commitment there are rarely resources in place to complete the tasks required for establishing and running an effective API program.
  2. Determining the right business model helps to define the functionality of the product, which is needed to satisfy third parties and generate business.
  3. Determining the right business model ensures attention is paid to roles and responsibilities within an organization, and to who retains which parts of the value generated by the API. This also implies defining what users of the API gain from use of the API and how that balances against what the API provider gains.

Design and implement with the user in mind

Good API design has some core principles, which may differ in implementation. Here’s an analogy: every car has a steering wheel, brake pedals, and an accelerator. You might find that the hazard lights, the trunk release, or radio are slightly different from model to model, but it’s rare that an experienced driver can’t figure out how to drive a rental car.

This level of "ready-to-drive" design is what great API teams strive for—APIs which require little or no explanation for the experienced practitioner to begin using them.

Simplicity

Simplicity of API design depends on the context. A particular design may be simple for one use case but very complex for another, so the granularity of API methods must be balanced. It can be useful to think about simplicity on several levels, including:

  • Data format. Support of XML, JSON, proprietary formats, or a combination.
  • Method structure. Methods can be very generic, returning a broad set of data, or very specific to allow for targeted requests. Methods are also usually called in a certain sequence to achieve certain use cases.
  • Data model. The underlying data model can be very similar or very different to what is actually exposed via the API. This has an impact on usability, as well as maintainability.
  • Authentication. Different authentication mechanisms have different strengths and weaknesses. The most suitable one depends on the context.
  • Usage policies. Rights and quotas for developers should be easy to understand and work with.

Flexibility

Making an API simple may conflict with making it flexible. An API created with only simplicity in mind runs the risk of becoming overly tailored, serving only very specific use cases, and may not be flexible enough for other use cases.

To establish flexibility, first find out what the potential space of operations is based on, including the underlying systems and data models, and defining what subset of these operations is feasible and valuable. In order to find the right balance between simplicity and flexibility:

  • Try to expose atomic operations. By combining atomic operations, the full space can be covered.
  • Identify the most common and valuable use cases. Design a second layer of meta operations that combine several atomic operations to serve these use cases.

Arguably, the concept of hypermedia as the engine of application state (HATEOAS) can further improve flexibility because it allows runtime changes in the API and in client operations. HATEOAS does increase flexibility by making versioning and documentation easier, however, in API design, many questions must be considered.

Critical questions for consideration

In order to think through your API design, consider the following 5 questions:

  1. Have we designed the API to support our use cases? The next step after identifying the main use cases is to design the API so that it supports these use cases. Flexibility is important so as not to exclude any use cases that may be less frequent, but should still be supported to allow for innovation.
  2. Are we being RESTful for the sake of it?RESTful APIs are quite fashionable, but you shouldn't follow this trend just for the sake of fashion. There are use cases which are very well suited for it, but there are others that favor other architectural styles, such as GraphQL.
  3. Did we expose our data model without thinking about use cases? An API should be supported by a layer that abstracts from your actual data model. As a general rule, don’t have an API that goes directly to your database—although there may be cases which require that.
  4. Which geographic regions are most important and have we planned our datacenters accordingly? API design must also cover nonfunctional elements, such as latency and availability. Make sure to choose datacenters that are geographically close to where you have most of your users.
  5. Are we synchronizing the API design with our other products? If the API is not the sole product of your business, make sure that the API design is coordinated with the design of the other products. It may be that you decide to completely decouple API design from other products. Even if this is the case, plans to decouple API design from other products needs to be made clear and communicated both internally and externally.

Obsess about developer experience

A key metric to improve API design for easy adoption is the "Time to first hello world" (TTFHW). In other words, how long does it take a developer to reach a minimum viable product with your API? This is a great way to put yourself in the shoes of a developer who wants to test your API to see what it takes to get something working.

When you define the start and end of the TTFHW metric, we recommend covering as many aspects of the developer engagement process as possible. Then optimize it to be as quick and convenient as possible.

Being able to go through the process quickly also builds developer confidence that the API is well organized, and things are likely to work as expected. Delaying the "success moment" too long risks losing developers.

In addition to TTFHW, we recommend another metric: "Time to first profitable app" (TTFPA). This is trickier, because "profitable" is a matter of definition, depending on your API and business strategy. Considering this is helpful because it forces you to think about aspects related to API operations as part of the API program.

The 2 underlying principles of developer experience are:

  1. Design a product or service that provides a clear value to developers and addresses a clear challenge or opportunity. This can be monetary value or some other value, such as a way to increase reach, brand awareness, customer base, indirect sales, reputation for the developer, or simply the joy of using great technology that works.
  2. The product needs to be easily accessible. This can include having a lightweight registration mechanism (or none at all), access to testing features, great documentation, and a lot of free and tidy source code.

We suggest that most API programs should have a developer program—regardless of whether you expose your APIs publicly, to partners only, or internally only. The provisions may be more or less elaborate depending on the audience.

Developer portal

The developer portal is the key element of a developer program this is the core entry point for developers to sign up, access, and use your APIs. Getting access to your API should be simple and easy for developers. They should be able to get started quickly.

TTFHW is the best metric to measure this. You should also consider streamlining the sign-up process—the simpler and quicker, the better. A recommended best practice is that developers should be able to invoke your APIs to examine their behavior (request and response) without any sign-up at all. Also, supplementary content—such as getting started guides, API reference documentation, or source code—are great to lessen the learning curve.

Acceleration via ecosystem partners

As an API provider you are operating in an ecosystem of partners and vendors. These partners often have their own content distribution and communication networks and means. We recommend identifying alliances, which can be effective in helping to increase the adoption of your API. Often such alliances can be found when APIs are complementary and provide value to developers when combined.


Videoya baxın: RESTful API на чистом PHP (Oktyabr 2021).