Üçüncü tərəf tətbiqinin API ilə necə işləmək olar. API üzrə mühərrik yağlarının təsnifatı. API İnkişaf Planları

Bu qısa müddət birtəhər inkişafla qarşılaşmış hər kəsə yaxşı məlumdur. Ancaq hər kəs bunun nə demək olduğunu və nə üçün lazım olduğunu başa düşmür. İnkişaf etdirici Pyotr Qazarov API haqqında danışdı sadə dillə desək blogunuzda.

API abbreviaturası "Application Programming Interface" (application programming interface, application programming interface) mənasını verir. Böyük şirkətlərin əksəriyyəti müəyyən mərhələdə müştərilər və ya müştərilər üçün API hazırlayır daxili istifadə. API-nin inkişafda və biznesdə necə və necə istifadə olunduğunu anlamaq üçün ilk növbədə World Wide Web-in necə işlədiyini başa düşməlisiniz.

World Wide Web və uzaq serverlər

WWW-ni hər bir səhifəni saxlayan bağlı serverlərin böyük şəbəkəsi kimi təsəvvür etmək olar. adi noutbukşəbəkədə bütün sayta xidmət göstərə bilən serverə çevrilə bilər və yerli serverlər tərtibatçılar saytları geniş istifadəçilər üçün açmadan əvvəl yaratmaq üçün istifadə edirlər.

Brauzerin ünvan çubuğuna yazarkən www.facebook.com uzaq Facebook serverinə müvafiq sorğu göndərilir. Brauzer cavabı aldıqdan sonra kodu şərh edir və səhifəni təqdim edir.

İstifadəçi hər dəfə internetdə bir səhifəyə daxil olduqda, uzaq serverin API ilə qarşılıqlı əlaqədə olur. API sorğuları qəbul edən və cavablar göndərən server hissəsidir.

API müştərilərə xidmət etmək üçün bir yol kimi

Bir çox şirkət API-ni hazır məhsul kimi təklif edir. Məsələn, Weather Underground öz hava məlumatı API-sinə girişi satır.

İstifadə ssenarisi: kiçik bir şirkətin saytında müştərilər üçün görüş təyin etmək üçün bir forma var. Şirkət müştərilərə avtomatik tədbir yaratmaq və qarşıdan gələn görüşün təfərrüatlarını doldurmaq imkanı vermək üçün ona Google Təqvimi daxil etmək istəyir.

API Tətbiqi: məqsəd - sayt serveri göstərilən təfərrüatlarla hadisə yaratmaq, Google-dan cavab almaq, onu emal etmək və müvafiq məlumatları brauzerə ötürmək, məsələn, istifadəçiyə təsdiq mesajı vermək tələbi ilə birbaşa Google serveri ilə əlaqə saxlamalıdır. .

Alternativ olaraq, brauzer şirkətin serverindən yan keçərək Google server API-yə sorğu göndərə bilər.

API ilə müqayisədə Google Təqvimşəbəkədəki hər hansı digər uzaq serverin API-dən fərqlidir?

Texniki cəhətdən fərq sorğu və cavab formatındadır. Tam veb səhifə yaratmaq üçün brauzer HTML işarələmə dilində cavab gözləyir, Google Calendar API isə sadəcə JSON formatında məlumatları qaytaracaq.

API-yə sorğu şirkətin veb saytının serveri tərəfindən edilirsə, o, müştəridir (eynilə istifadəçi veb-saytı açarkən müştəri brauzerdir).

API sayəsində istifadəçi şirkətin veb-saytını tərk etmədən hərəkəti yerinə yetirmək imkanı əldə edir.

Müasir veb saytların əksəriyyəti ən azı bir neçə üçüncü tərəf API-lərindən istifadə edir. Bir çox tapşırıqda artıq üçüncü tərəf tərtibatçıları tərəfindən təklif olunan hazır həllər var, istər kitabxana, istərsə də xidmət. Hazır bir həllə müraciət etmək çox vaxt daha asan və etibarlıdır.

Bir çox tərtibatçı tətbiqi API istifadə edərək bir-biri ilə qarşılıqlı əlaqədə olan bir neçə serverə paylayır. Əsas proqram serverinə münasibətdə köməkçi funksiyanı yerinə yetirən serverlərə mikroservislər deyilir.

Beləliklə, bir şirkət istifadəçilərinə API təklif etdikdə, bu, sadəcə olaraq, məlumatı cavab olaraq qaytaran bir sıra xüsusi URL-lər yaratdığını bildirir.

Bu cür sorğular tez-tez brauzer vasitəsilə göndərilə bilər. HTTP vasitəsilə məlumat ötürülməsi mətn şəklində olduğundan, brauzer həmişə cavabı göstərə biləcək. Məsələn, brauzer vasitəsilə siz birbaşa GitHub API-yə (https://api.github.com/users/petrgazarov) və giriş nişanı olmadan daxil ola və JSON formatında aşağıdakı cavabı əldə edə bilərsiniz:

Brauzer koda daxil edilə bilən JSON cavabını mükəmməl şəkildə göstərir. Öz mülahizənizlə istifadə etmək üçün belə mətndən sadəcə məlumat çıxarmaq kifayətdir.

Daha bir neçə API nümunəsi

“Tətbiq” (tətbiqi, tətbiqi) sözü müxtəlif mənalarda işlənə bilər. API kontekstində bu o deməkdir:

  • müəyyən bir funksiyaya malik proqram parçası,
  • bütövlükdə server, bütövlükdə proqram və ya proqramın ayrı bir hissəsi.

Ətraf mühitdən aydın şəkildə fərqləndirilə bilən istənilən proqram təminatı ingilis abreviaturasındakı “A” hərfini əvəz edə bilər, həmçinin bir növ API-yə malik ola bilər. Məsələn, bir tərtibatçı koda üçüncü tərəf kitabxanasını tətbiq etdikdə, o, bütün proqramın bir hissəsinə çevrilir. Ayrı bir proqram parçası olmaqla, kitabxana proqram kodunun qalan hissəsi ilə qarşılıqlı əlaqədə olmağa imkan verən bir növ API-yə sahib olacaqdır.

Obyekt yönümlü dizaynda kod obyektlərin toplusu kimi təmsil olunur. Tətbiqdə bir-biri ilə qarşılıqlı əlaqədə olan yüzlərlə belə obyekt ola bilər. Onların hər birinin öz API - dəsti var ictimai xassələri və tətbiqdəki digər obyektlərlə qarşılıqlı əlaqə üsulları. Obyektlər də ola bilər özəl, mühitdən gizli olan və API olmayan daxili məntiq.

API mühərrik yağlarının təsnifatı sistemi () 1969-cu ildə yaradılmışdır. API sisteminə uyğun olaraq mühərrik yağlarının təyinatına və keyfiyyətinə görə üç əməliyyat kateqoriyası (üç sıra) müəyyən edilmişdir:
S (Xidmət)- xronoloji ardıcıllıqla gedən benzin mühərrikləri üçün motor yağlarının keyfiyyət kateqoriyalarından ibarətdir.
C (Kommersiya)- xronoloji ardıcıllıqla gedən dizel mühərrikləri üçün yağların keyfiyyət və təyinat kateqoriyalarından ibarətdir.
EC (Enerji Qoruma)- enerjiyə qənaət edən yağlar. Yeni sıra sınaqların nəticələrinə görə yanacaq sərfiyyatını azaldan aşağı özlülüklü, asan axan yağlardan ibarət yüksək keyfiyyətli yağlar benzin mühərrikləri.

Hər yeni sinifə əlavə əlifba hərfi verilir. Benzin və dizel mühərrikləri üçün universal yağlar müvafiq kateqoriyaların iki simvolu ilə göstərilir: birinci simvol əsasdır, ikincisi isə bu yağdan başqa bir mühərrik növü üçün istifadə imkanını göstərir. Nümunə: API SM/CF.

Benzinli Mühərriklər üçün API Keyfiyyət Dərsləri

API sinfi SN- 2010-cu il oktyabrın 1-də təsdiq edilmişdir.
API SN ilə əvvəlki API təsnifatları arasındakı əsas fərq, uyğunluq üçün fosfor tərkibinin məhdudlaşdırılmasıdır. müasir sistemlər işlənmiş qazların zərərsizləşdirilməsi, həmçinin hərtərəfli enerjiyə qənaət. Yəni, API SN-ə uyğun olaraq təsnif edilən yağlar yüksək temperaturun özlülüyünə görə düzəliş edilmədən təxminən ACEA C2, C3, C4-ə uyğun olacaq.

API sinfi SM- 30 noyabr 2004-cü ildə təsdiq edilmişdir.
Müasir benzin (çox klapanlı, turbomühərrikli) mühərriklər üçün motor yağları. SL sinfi ilə müqayisədə API SM tələblərinə cavab verən mühərrik yağları oksidləşmədən və mühərrik hissələrinin vaxtından əvvəl aşınmasından daha yüksək səviyyədə qorunmalıdır. Bundan əlavə, yağın aşağı temperaturda xassələri ilə bağlı standartlar yüksəldilib. Bu sinifdə olan mühərrik yağları ILSAC enerji səmərəliliyi sinfinə uyğun sertifikatlaşdırıla bilər.
API SL, SM tələblərinə cavab verən mühərrik yağları avtomobil istehsalçısı tərəfindən SJ və ya daha əvvəlki siniflərin tövsiyə edildiyi hallarda istifadə edilə bilər.

API sinfi SL- 2000-ci ildən sonra istehsal edilmiş avtomobillərin mühərrikləri üçün motor yağları.
Avtomobil istehsalçılarının tələblərinə uyğun olaraq, bu sinif motor yağları müasir artan ekoloji tələblərə cavab verən, həmçinin enerjiyə qənaət edən arıq yanacaq qarışıqları ilə işləyən çoxklapanlı, turbomühərriklərdə istifadə olunur. API SL tələblərinə cavab verən yağlar avtomobil istehsalçısı tərəfindən SJ və ya daha əvvəlki siniflərin tövsiyə edildiyi hallarda istifadə edilə bilər.

SJ API sinfi- 1996-cı ildən bəri benzin mühərriklərində istifadə üçün mühərrik yağları.
Bu sinif 1996-cı ildən bəri benzin mühərriklərində istifadə olunan motor yağlarını təsvir edir. Bu sinif mühərrik yağları avtomobil istehsalçılarının tələblərinə uyğun olaraq xidmət edilən avtomobillərin və idman avtomobillərinin, mikroavtobusların və yüngül yük maşınlarının benzin mühərriklərində istifadə üçün nəzərdə tutulmuşdur. SJ, SH ilə eyni minimum standartlara və karbon yığılması və aşağı temperaturda işləmə üçün əlavə tələblərə malikdir. API SJ tələblərinə cavab verən mühərrik yağları avtomobil istehsalçısı tərəfindən SH və ya daha əvvəl tövsiyə edildiyi hallarda istifadə edilə bilər.

API sinfi SH- 1994-cü ildən bəri benzin mühərrikləri üçün mühərrik yağları.
Bu sinif 1993-cü ildən tövsiyə olunan motor yağları üçün 1992-ci ildə qəbul edilmişdir. Bu sinif SG sinfindən daha yüksək tələblərlə xarakterizə olunur və yağların karbon, antioksidan, aşınmaya qarşı xüsusiyyətlərini yaxşılaşdırmaq üçün sonuncunun əvəzedicisi kimi işlənib hazırlanmışdır. korroziyaya qarşı artan qorunma. Bu sinif motor yağları istehsalçılarının tövsiyələrinə uyğun olaraq avtomobillərin, mikroavtobusların və yüngül yük maşınlarının benzin mühərriklərində istifadə üçün nəzərdə tutulub. Bu sinif mühərrik yağları Kimya İstehsalçıları Assosiasiyasının (CMA) tələblərinə uyğun olaraq sınaqdan keçirilmişdir. Bu dərəcəli mühərrik yağları avtomobil istehsalçısı tərəfindən SG və ya daha əvvəlki siniflər tövsiyə edildikdə istifadə edilə bilər.

API sinfi SG- 1989-cu ildən bəri benzin mühərrikləri üçün mühərrik yağları.
Minik avtomobillərinin, mikroavtobusların və yüngül yük maşınlarının benzin mühərriklərində istifadə üçün nəzərdə tutulmuşdur. Bu sinif motor yağları, əvvəlki siniflərlə müqayisədə karbon çöküntülərindən, yağ oksidləşməsindən və mühərrik aşınmasından yaxşılaşdırılmış qorunma təmin edən xüsusiyyətlərə malikdir, həmçinin mühərrikin daxili hissələrini pasdan və korroziyadan qoruyan əlavələr ehtiva edir. SG dərəcəli mühərrik yağları API CC dizel mühərrik yağı tələblərinə cavab verir və SF, SE, SF/CC və ya SE/CC siniflərinin tövsiyə edildiyi yerlərdə istifadə edilə bilər.

API sinfi SF- 1980-ci ildən bəri benzin mühərrikləri üçün mühərrik yağları (köhnəlmiş sinif).
Bu mühərrik yağları 1980-1989-cu illərdə istehsal edilmiş benzin mühərriklərində mühərrik istehsalçısının tövsiyə və göstərişlərinə uyğun olaraq istifadə edilmişdir. Artmış oksidləşmə müqaviməti, SE əsas yağları üzərində təkmilləşdirilmiş aşınma qorunması və lil, pas və korroziyaya qarşı daha yaxşı qorunma təmin edir. SF sinifli mühərrik yağları əvvəlki SE, SD və ya SC sinifləri üçün əvəzedici kimi istifadə edilə bilər.

API SE sinfi- 1972-ci ildən istehsal olunan benzin mühərrikləri üçün mühərrik yağları (köhnəlmiş sinif). Bu motor yağları 1972-79-cu illərin benzin mühərriklərində, eləcə də 1971-ci ilin bəzi modellərində istifadə edilmişdir.SC və SD motor yağları ilə müqayisədə əlavə qorunma və bu kateqoriyalar üçün əvəzedici kimi istifadə edilə bilər.

SD API sinfi- 1968-ci ildən benzin mühərriklərində istifadə üçün mühərrik yağları (köhnəlmiş sinif). Bu sinif motor yağları 1968-70-ci illərdə istehsal olunmuş minik avtomobillərinin və bəzi yük maşınlarının benzin mühərriklərində, həmçinin 1971-ci və sonrakı illərdə bəzi modellərdə istifadə edilmişdir. SC mühərrik yağları ilə müqayisədə təkmilləşdirilmiş qoruma, həmçinin yalnız mühərrik istehsalçısı tərəfindən tövsiyə edildikdə istifadə olunur.

API sinfi SC- 1964-cü ildən başlayaraq benzin mühərrikləri üçün mühərrik yağları (köhnəlmiş sinif). Onlar adətən 1964-1967-ci illərdə istehsal olunmuş avtomobillərin və bəzi yük maşınlarının mühərriklərində istifadə olunurdu. Yüksək və aşağı temperaturlu çöküntüləri azaldın, köhnəlir və korroziyadan qoruyun.

API sinfi SB- aşağı güclü benzin mühərrikləri üçün mühərrik yağları (köhnəlmiş sinif). 20-ci əsrin 30-cu illərinin motor yağları, aşınmaya və oksidləşməyə qarşı kifayət qədər yüngül qorunma, eləcə də yüngül yük şəraitində işləyən mühərriklərdə rulmanların korroziyaya qarşı qorunmasını təmin etdi. Bu sinif mühərrik yağları yalnız mühərrik istehsalçısı tərəfindən xüsusi olaraq tövsiyə edildiyi təqdirdə istifadə edilə bilər.

API sinfi SA- benzin və dizel mühərrikləri üçün mühərrik yağları. Parçaların əlavələrlə qorunmasına ehtiyac olmayan şəraitdə və rejimlərdə işləyən köhnə mühərriklərdə istifadə üçün köhnəlmiş yağlar sinfi. Bu sinif mühərrik yağları yalnız mühərrik istehsalçısı tərəfindən tövsiyə olunarsa istifadə edilə bilər.

Dizel Mühərriklər üçün API Keyfiyyət Dərsləri

API sinfi CJ-4- 2006-cı il oktyabrın 1-dən qüvvəyə minir.
Bu sinif xüsusi olaraq ağır yük mühərrikləri üçün nəzərdə tutulmuşdur. 2007-ci il mühərrikləri üçün əsas NOx və hissəcik emissiyaları tələblərinə cavab verir. Bəzi göstəricilər üçün CJ-4 yağlarına məhdudiyyətlər qoyulur: kül tərkibi 1,0% -dən az, kükürd 0,4%, fosfor 0,12%.
Yeni təsnifat əvvəlki API CI-4 PLUS, CI-4 kateqoriyalarının tələblərini özündə cəmləşdirir, lakin 2007-ci ilin və sonrakı emissiya standartlarına cavab verən yeni mühərriklərin ehtiyaclarına cavab olaraq tələblərə əhəmiyyətli dəyişikliklər edir.

API Sinfi CI-4 (CI-4 PLUS)- dizel mühərrikləri üçün motor yağlarının yeni əməliyyat sinfi. API CI-4 ilə müqayisədə, xüsusi his tərkibinə, eləcə də dəyişkənliyə və yüksək temperaturda oksidləşməyə olan tələblər artır. Bu təsnifatda sertifikatlaşdırıldıqda, mühərrik yağı on yeddi mühərrik testində sınaqdan keçirilməlidir.

API sinfi CI-4- sinif 2002-ci ildə təqdim edilmişdir.
Bu mühərrik yağları müasir dizel mühərriklərində istifadə olunur müxtəlif növlər enjeksiyon və gücləndirmə. Bu sinifə cavab verən mühərrik yağında müvafiq yuyucu və dispersant əlavələr olmalıdır və CH-4 sinfi ilə müqayisədə istilik oksidləşməsinə qarşı artan müqavimətə, eləcə də daha yüksək dispersant xassələrə malik olmalıdır. Bundan əlavə, bu cür motor yağları qazların təsiri altında 370 ° C-ə qədər iş temperaturunda dəyişkənliyi azaltmaqla və buxarlanmanı azaltmaqla mühərrik yağı tullantılarının əhəmiyyətli dərəcədə azaldılmasını təmin edir. Soyuq pompalanmaya olan tələblər də gücləndirilib, motor yağının axıcılığını yaxşılaşdırmaqla boşluqlar, dözümlülüklər və motor möhürlərinin resursu artırılıb.
API CI-4 sinfi 2002-ci il oktyabrın 1-dən istehsal olunan mühərriklərə tətbiq edilən ekologiya və işlənmiş qazların toksikliyi üçün yeni, daha sərt tələblərin yaranması ilə əlaqədar təqdim edilmişdir.

API sinfi CH-4- 1998-ci il dekabrın 1-dən qüvvəyə minir.
Bu sinif mühərrik yağları yüksək sürətli şəraitdə işləyən və 1998-ci il emissiya standartlarının və standartlarının tələblərinə cavab verən dörd vuruşlu dizel mühərriklərində istifadə olunur.
API CH-4 motor yağları həm Amerika, həm də Avropa dizel mühərrikləri istehsalçılarının kifayət qədər ciddi tələblərinə cavab verir. Sinif tələbləri xüsusi kükürdün 0,5%-ə qədər olan yüksək keyfiyyətli yanacaqla işləyən mühərriklərdə istifadə üçün nəzərdə tutulmuşdur. Eyni zamanda, API CG-4 sinifindən fərqli olaraq, bu motor yağlarının resursu tərkibində kükürdün miqdarı 0,5%-dən çox olan dizel yanacağının istifadəsinə daha az həssasdır ki, bu da Cənubi Amerika, Asiya ölkələri üçün xüsusilə vacibdir. , və Afrika.
API CH-4 mühərrik yağları artan tələblərə cavab verir və klapanların aşınmasının və daxili səthlərdə karbon çöküntülərinin əmələ gəlməsinin daha effektiv qarşısını alan əlavələrdən ibarət olmalıdır. Onlar mühərrik istehsalçısının tövsiyələrinə uyğun olaraq API CD, API CE, API CF-4 və API CG-4 motor yağlarının əvəzediciləri kimi istifadə edilə bilər.

API sinfi CG-4- sinif 1995-ci ildə təqdim edilmişdir.
Bu sinif mühərrik yağları yüksək yük və yüksək sürətli rejimlərdə işləyən magistral və magistral olmayan tipli avtobusların, yük maşınlarının və traktorların dörd vuruşlu dizel mühərrikləri üçün tövsiyə olunur. API CG-4 mühərrik yağı xüsusi kükürdün miqdarı 0,05%-dən çox olmayan yüksək keyfiyyətli yanacaqlardan istifadə edən mühərriklər, eləcə də yanacağın keyfiyyətinə xüsusi tələblər olmayan mühərriklər üçün uyğundur (xüsusi kükürdün miqdarı 0,5%-ə çata bilər) ).
API CG-4 sertifikatlı motor yağları daxili mühərrik hissələrinin aşınmasının, daxili səthlərdə və porşenlərdə çöküntülərin əmələ gəlməsinin, oksidləşmənin, köpüklənmənin və hisin əmələ gəlməsinin qarşısını daha effektiv şəkildə almalıdır (bu xüsusiyyətlər xüsusilə müasir uzun məsafəli avtobus və traktorların mühərrikləri üçün lazımdır). ).
API CG-4 sinfi ABŞ-da işlənmiş qazların ekologiyası və toksikliyi üçün yeni tələblərin və standartların təsdiqlənməsi ilə əlaqədar yaradılmışdır (1994-cü ildə yenidən işlənmişdir). Bu sinif mühərrik yağları API CD, API CE və API CF-4 siniflərinin tövsiyə edildiyi mühərriklərdə istifadə edilə bilər. Bu sinif motor yağlarının kütləvi istifadəsini məhdudlaşdıran əsas çatışmazlıq, məsələn, Şərqi Avropa və Asiyada motor yağı resursunun istifadə olunan yanacağın keyfiyyətindən əhəmiyyətli dərəcədə asılılığıdır.

API Sinfi CF-2 (CF-II)- ağır şəraitdə işləyən iki vuruşlu dizel mühərriklərində istifadə üçün nəzərdə tutulmuş motor yağları.
Sinif 1994-cü ildə təqdim edilmişdir. Bu sinif motor yağları adətən artan gərginlik altında işləyən iki vuruşlu dizel mühərriklərində istifadə olunur. API CF-2 yağlarında silindrlər və üzüklər kimi mühərrikin daxili hissələrinin aşınmasına qarşı gücləndirilmiş performans qorunmasını təmin edən əlavələr olmalıdır. Bundan əlavə, bu motor yağları motorun daxili səthlərində çöküntülərin yığılmasının qarşısını almalıdır (təkmilləşdirilmiş təmizləmə funksiyası).
API CF-2 sertifikatına malik mühərrik yağı təkmilləşdirilmiş xassələrə malikdir və istehsalçının tövsiyəsi əsasında köhnə oxşar yağların əvəzinə istifadə edilə bilər.

API sinfi CF-4- 1990-cı ildən bəri dörd vuruşlu dizel mühərriklərində istifadə üçün mühərrik yağları.
Bu sinif mühərrik yağları iş şəraiti yüksək sürətli rejimlərlə əlaqəli olan dörd vuruşlu dizel mühərriklərində istifadə edilə bilər. Belə şərtlər üçün yağ keyfiyyətinə olan tələblər CE sinifinin imkanlarını üstələyir, buna görə də CE sinif yağlarının əvəzinə CF-4 mühərrik yağları istifadə edilə bilər (mühərrik istehsalçısının müvafiq tövsiyələri varsa).
API CF-4 motor yağlarında avtomobil yağının yanmasını azaldan, həmçinin porşen qrupunda karbon çöküntülərindən qorunmağı təmin edən müvafiq əlavələr olmalıdır. Bu sinif motor yağlarının əsas məqsədi ağır yüklü traktorların və magistral yollarda uzun səfərlər üçün istifadə olunan digər nəqliyyat vasitələrinin dizel mühərriklərində istifadə etməkdir.
Bundan əlavə, bu mühərrik yağlarına bəzən ikili API CF-4/S dərəcəsi verilir. Bu halda, mühərrik istehsalçısının müvafiq tövsiyələri olduqda, bu motor yağları benzin mühərriklərində də istifadə edilə bilər.

API CF sinfi (CF-2, CF-4)- dolayı enjeksiyonlu dizel mühərrikləri üçün mühərrik yağları. Dərslər 1990-1994-cü illərdə tətbiq edilib. Çizilmiş nömrə iki və ya dörd vuruşlu mühərrik deməkdir.
CF sinfi dolayı inyeksiyalı dizel mühərriklərində, eləcə də yanacaqla işləyən digər növ dizel mühərriklərində istifadə üçün tövsiyə olunan motor yağlarını təsvir edir. fərqli keyfiyyət, o cümlədən yüksək kükürd tərkibli olanlar (məsələn, ümumi kütlənin 0,5% -dən çoxu).
CF sertifikatlı mühərrik yağlarında piston çöküntülərinin, mis (mis tərkibli) podşipniklərin aşınmasının və korroziyasının qarşısını almaqda daha effektiv olan əlavələr var. böyük əhəmiyyət kəsb edir bu tip mühərriklər üçün və adi üsulla, həmçinin turbokompressor və ya kompressordan istifadə etməklə vurula bilər. Bu dərəcəli mühərrik yağları CD keyfiyyətinin tövsiyə edildiyi yerlərdə istifadə oluna bilər.

API CE sinfi- 1983-cü ildən dizel mühərriklərində istifadə üçün mühərrik yağları (köhnəlmiş sinif).
Bu sinif avtomobil yağları əhəmiyyətli dərəcədə artan iş sıxlığı ilə xarakterizə olunan bəzi ağır turbo mühərriklərdə istifadə üçün nəzərdə tutulmuşdur. Bu cür yağların istifadəsinə həm aşağı, həm də yüksək mil sürəti olan mühərriklər üçün icazə verildi.
API CE mühərrik yağları 1983-cü ildən istehsal edilmiş və ağır iş şəraitində işləyən aşağı və yüksək sürətli dizel mühərrikləri üçün tövsiyə edilmişdir. Mühərrik istehsalçısının müvafiq tövsiyələrinin olması şərti ilə, bu motor yağları CD sinifli mühərrik yağlarının tövsiyə edildiyi mühərriklərdə də istifadə oluna bilər.

API sinfi CD-II- iki vuruşlu iş dövrü (köhnəlmiş sinif) olan ağır yüklü dizel mühərriklərində istifadə üçün mühərrik yağları.
Bu sinif iki vuruşlu dizel mühərriklərində istifadə üçün 1985-ci ildə təqdim edilmişdir və əslində, əvvəlki API CD sinifinin təkamül inkişafıdır. Bu cür motor yağlarından istifadənin əsas məqsədi əsasən kənd təsərrüfatı maşınlarında quraşdırılmış ağır güclü dizel mühərriklərində istifadə etmək idi. Bu sinifin mühərrik yağları əvvəlki CD sinifinin bütün performans standartlarına cavab verir, əlavə olaraq, mühərrikin karbon yataqlarına və aşınmaya qarşı yüksək effektiv qorunması tələbləri əhəmiyyətli dərəcədə artırılıb.

CD API sinfi- kənd təsərrüfatı maşınlarında istifadə olunan artan gücə malik dizel mühərrikləri üçün mühərrik yağları (köhnəlmiş sinif). Bu sinif 1955-ci ildə karbon yataqlarına və aşınmaya qarşı effektiv qorunmanın vacib olduğu silindrlərin sıxılmasının artması ilə həm atmosfer, həm də turbomühərrikli bəzi dizel mühərriklərində ümumi istifadə üçün təqdim edilmişdir. Bu sinif mühərrik yağları, mühərrik istehsalçısının yanacağın keyfiyyətinə (yüksək kükürdlü yanacaq daxil olmaqla) əlavə tələblər irəli sürmədiyi hallarda istifadə edilə bilər.
API CD motor yağları, əvvəlki siniflərlə müqayisədə, dizel mühərriklərində rulman korroziyasına və yüksək temperaturda hisə qarşı artan qorunma təmin etməli idi. Çox vaxt bu sinifdəki mühərrik yağları Caterpillar Traktor Şirkəti tərəfindən hazırlanmış Superior Sürtkü Yağları (Series 3) sertifikatının tələblərinə cavab verdiyinə görə "Caterpillar Series 3" adlanırdı.

API sinfi CC- orta yük şəraitində işləyən dizel mühərrikləri üçün mühərrik yağları (köhnəlmiş sinif).
Sinif 1961-ci ildə həm atmosferik, həm də turbomühərrikli, artan sıxılma ilə xarakterizə olunan bəzi mühərriklərdə istifadə üçün təqdim edilmişdir. Bu sinif mühərrik yağları orta və yüksək yük rejimlərində işləyən mühərriklər üçün tövsiyə edilmişdir.
Bundan əlavə, mühərrik istehsalçısının tövsiyələrinə uyğun olaraq, bu cür motor yağları bəzi güclü benzin mühərriklərində istifadə edilə bilər.
Əvvəlki markalarla müqayisədə, API CC motor yağları dizel mühərriklərində yüksək temperaturlu çöküntülərdən və podşipnik korroziyasından, həmçinin benzin mühərriklərində pas, korroziya və aşağı temperatur çöküntülərindən daha yüksək səviyyədə qorunma təmin etmək tələb olunurdu.

API sinfi CB- orta yüklə işləyən dizel mühərrikləri üçün mühərrik yağları (köhnəlmiş sinif).
Bu sinif 1949-cu ildə xüsusi keyfiyyət tələbləri olmadan yüksək kükürd tərkibli yanacaqdan istifadə edərək CA sinifinin təkamül inkişafı kimi təsdiq edilmişdir. API CB motor yağları həm də yüngül və orta şəraitdə işləyən kompressorlu mühərriklərdə istifadə üçün nəzərdə tutulmuşdu. MIL-L-2104A Əlavə 1 hərbi qaydalarına uyğunluğu göstərmək üçün bu dərəcəli tez-tez "Əlavə 1 Motor Yağları" adlandırılırdı.

API sinfi CA- yüngül yüklənmiş dizel mühərrikləri üçün mühərrik yağları (köhnəlmiş sinif).
Bu sinif avtomobil yağları yüksək keyfiyyətli dizel yanacağı ilə yüngül və orta şəraitdə işləyən dizel mühərriklərində istifadə üçün nəzərdə tutulmuşdur. Avtomobil istehsalçılarının tövsiyələrinə uyğun olaraq, onlar orta şəraitdə işləyən bəzi benzin mühərriklərində də istifadə edilə bilər.
Sinif keçən əsrin 40-50-ci illərində geniş istifadə edilmişdir və mühərrik istehsalçısı tərəfindən tələb olunmadığı təqdirdə müasir şəraitdə istifadə edilə bilməz.
API CA mühərrik yağları, istifadə olunan yanacağın keyfiyyətinə xüsusi tələblər qoyulmayan, piston halqalarında karbon çöküntülərindən, həmçinin kompressorlu mühərriklərdə rulman korroziyasından qorunma təmin edən xüsusiyyətlərə malik olmalıdır.

Bu yazıda API-nin nə olduğunu bilmək istəyən testçilər üçün faydalı ola biləcək məlumatları toplamağa çalışdım. Ümid edirəm ki, API testində təcrübəsi olan insanlar da özləri üçün faydalı bir şey tapacaqlar. Yaxşı və ya heç olmasa məqaləmdəki səhvləri tapmağa kömək edin :)
API nədir

API (Application Programming Interface) - xarici proqram məhsullarında (Vikipediya) istifadə üçün proqram (kitabxana, xidmət) tərəfindən təmin edilən hazır siniflər, prosedurlar, funksiyalar, strukturlar və sabitlər toplusu.

Başqa sözlə desək, API bizə başqalarının işlərindən öz məqsədlərimiz üçün istifadə etmək imkanı verir. İlk dəfə nümunə olaraq Windows API istifadə edən API ilə rastlaşdım. Bu, müəyyən bir OS-də işləyən hər hansı bir proqramın istifadə edə biləcəyi funksiyalar toplusudur. Məsələn, interfeysi çəkmək üçün standart funksiyalardan istifadə edə bilər.

Müasir API-lər tez-tez istifadəçiləri (həm insanlar, həm də digər veb xidmətləri) bir növ məlumatla təmin edən veb xidmətləri formasını alır. Adətən məlumat mübadiləsi proseduru və məlumat ötürmə formatı elə qurulur ki, hər iki tərəf bir-biri ilə necə qarşılıqlı əlaqə quracağını bilsin.

https://dev.hh.ru/ saytında (daha doğrusu, https://github.com/hhru/api/blob/master/docs/general.md) HeadHunter API müştərilərinin və xidmətlər bir-biri ilə qarşılıqlı əlaqədə olur. Məsələn, saytdan bir sitat:

  • Bütün API-lər HTTPS protokolu üzərində işləyir.
  • Avtorizasiya OAuth2 protokolundan istifadə etməklə həyata keçirilir.
  • Bütün məlumatlar yalnız JSON formatında mövcuddur.
  • Əsas URL - https://api.hh.ru/
  • Tarixlər ISO 8601-ə uyğun formatlaşdırılıb: YYYY-AA-GGTs:dd:ss±hhmm
Siz HH API-ni oxuya bilərsiniz - bu, istifadəçi sənədlərinin yaxşı nümunəsidir.

Məlumat ötürmə formatları

İstifadəçilərin API ilə qarşılıqlı əlaqədə olmaq üçün istifadə etdiyi bir çox məlumat formatı var. Məsələn, tanınmış XML. Və ya JSON - belə görünən yüngül və mürəkkəb olmayan format:

( "id": "0001", "növ": "donut", "ad": "Kek", "şəkil": ( "url": "images/0001.jpg", "en": 200, "hündürlük" ": 200)) P ss haqqında Aşağıdakı linklərdən gələn cavabları görə bilərsiniz MediaWikiAPI , müxtəlif formatlarda :

JSON:https://en.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=info&format=jsonfm
XML: https://en.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=info&format=xmlfm
PHP: https://en.wikipedia.org/w/api.php?action=query&titles=Albert%20Einstein&prop=info&format=php ( diqqətlə, baş verir sallanma ilə fayl)

http g laqos

Adətən P Veb API-yə daxil olduqdaistifadə edərək HTTP sorğuları göndərilir . Buna görə dəən azı haqqında qısaca standart üsullar, tərkibində ola bilər HTTP sorğusu . Bu üsullar HTTP felləri də adlanır :

  • GET. Yəqin ki, ən məşhur növü xahiş. Məlumat almaq və ya oxumaq üçün istifadə olunur.
  • QOY. Adi n oh və spo Mənbəni yeniləmək üçün istifadə olunur .
  • POST. Adətən yeni resurs yaratmaq üçün istifadə olunur.
  • SİLİN. Məlumatları silir.
  • Və qeyriləri
Resurs haqqında məlumat əldə etmək istəyiriksə,kimin URI http://www.example.com/customers/12345 , sorğu göndərə bilərik:
http://www.example.com/customers/12345 ƏLDƏ EDİN

Bir resursu yeniləmək istəyiriksə - PUT sorğusu göndərə bilərik:
http://www.example.com/customers/12345/orders/98765 QOYUN

Normal GET sorğuları veb brauzer vasitəsilə göndərilə bilər. Digər növ sorğuların göndərilməsi skript dilləri və ya tələb edə bilər xüsusi alətlər(aşağıda daha ətraflı).

HTTP haqqında üsulları daha ətraflı oxumaq olar saat üzərində W iki.

HTTP cavabların qəsidəsinə

Server istifadəçi sorğularına cavab olaraq müxtəlif kodlar göndərə bilər. Bunlar xəta kodları və ya sadəcə olaraq istifadəçilərə serverin vəziyyəti haqqında məlumat verən kodlar ola bilər. Ətraflı Təsviri yenidən vikidə tapmaq olar.

Ən məşhur kodlar 4xx (müştəri tərəfi problemləri) və 5xx (server tərəfi problemləri) olur. API tərtibatçıları müəyyən bir vəziyyətdə hansı kodların qaytarılacağına özləri qərar verirlər. Məsələn, Odnoklassniki veb saytının API-si kodları qaytarır, onların təsviri https://apiok.ru/wiki/pages/viewpage.action?pageId=77824003 səhifəsində tapıla bilər.

Bundan əlavə, mən sizə Sorğu-cavab mahnısına qulaq asmağı məsləhət görürəm - HTTP sorğularında qaytarılan kodlar haqqında sadə və aydındır (diqqətlə, repchik :)).


REST API

REST API - bu yazının ideologiyasıdır qaynaşma mənasını verən APINümayəndəlik dövlətinin köçürülməsi API. O, yaradıcısı tərəfindən tərtib edilmiş aşağıdakı prinsiplərə əsaslanır , Roy Fieldinq:

  1. Müştəri-server arxitekturası
  2. Vətəndaşlığı olmayan server
  3. keşləmə qabiliyyəti
  4. Çox qatlı quruluş
  5. Tək interfeys
  6. Tələb üzrə kod
Təfərrüata varmayacağam, mövzu ilə bağlı oxumaq istəyənlərə məsləhət verə bilərəm

Windows API - xüsusiyyətlər dəsti əməliyyat sistemi

API abbreviaturası bir çox təcrübəsiz proqramçılara çox sirli və hətta qorxulu görünür. Əslində, Tətbiq Proqramlaşdırma İnterfeysi (API) proqram tərtibatçılarının istifadə edə biləcəyi bəzi hazır funksiyalar toplusudur. Ümumiyyətlə, bu konsepsiya əvvəllər daha tez-tez alt proqramlar kitabxanası adlandırılan anlayışa bərabərdir. Bununla belə, API adətən belə kitabxanaların xüsusi kateqoriyası kimi başa düşülür.

Demək olar ki, hər hansı kifayət qədər mürəkkəb proqramın (MyApplication) inkişafı zamanı son istifadəçi üçün MyApplication API adlanan bu xüsusi proqramı həyata keçirmək üçün istifadə olunan xüsusi daxili funksiyalar dəsti formalaşır. Bununla belə, tez-tez məlum olur ki, bu funksiyalar digər proqramçılar da daxil olmaqla, digər proqramları yaratmaq üçün effektiv şəkildə istifadə edilə bilər. Bu halda, müəlliflər məhsullarını tanıtmaq strategiyasına əsaslanaraq, xarici istifadəçilər üçün bu setə girişi açıb-açmamalarına qərar verməlidirlər? Cavab bəli olarsa, proqram paketinin təsvirində bu ifadə müsbət xarakteristikası kimi görünür: “Paketə API funksiyalarının açıq dəsti daxildir” (lakin bəzən əlavə pul üçün).

Beləliklə, çox vaxt API bir tətbiqin bir hissəsi olan, lakin eyni zamanda digər proqramlarda istifadə üçün mövcud olan bir sıra funksiyalara aiddir. Məsələn, Excel son istifadəçi üçün interfeysə əlavə olaraq bir dəsti var Excel funksiyaları Xüsusilə VB ilə proqramlar qurarkən istifadə edilə bilən API.

Müvafiq olaraq, Windows API əməliyyat sisteminin özünün bir hissəsi olan və eyni zamanda hər hansı digər proqramlar, o cümlədən VB-dən istifadə edərək yazılmış funksiyalar toplusudur. Bu baxımdan dəsti ilə bənzətmə sistemi kəsir BIOS/DOS, əslində DOS API-dir.

Fərq ondadır ki, Windows API funksiyalarının tərkibi, bir tərəfdən, DOS ilə müqayisədə daha genişdir, digər tərəfdən, kompüter resurslarının birbaşa idarə edilməsi üçün mövcud olan bir çox alətləri ehtiva etmir. əvvəlki OS-də proqramçılar. Bundan əlavə, Windows API-yə giriş adi prosedur çağırışlarından istifadə etməklə həyata keçirilir və DOS funksiyaları prosessorun Interrupt ("interrupt") adlanan xüsusi maşın göstərişi vasitəsilə çağırılır.

VB proqramçıları üçün niyə Win API lazımdır?

VB-nin çox müxtəlif funksiyalara malik olmasına baxmayaraq, az və ya çox ciddi inkişaf prosesində, onların imkanlarının lazımi vəzifələri həll etmək üçün çox vaxt kifayət etmədiyi ortaya çıxır. Eyni zamanda, təcrübəsiz proqramçılar tez-tez VB-nin çatışmazlıqlarından şikayət etməyə başlayırlar və onların kompüterində çoxlu alətlər dəsti olduğundan şübhələnmədən alətləri dəyişdirmək barədə düşünürlər və sadəcə onlardan necə istifadə edəcəyinizi bilmək lazımdır.

Win API ilə tanış olanda məlum olur ki, bir çox daxili VB funksiyaları müvafiq sistem prosedurlarına çağırışdan başqa bir şey deyil, yalnız sintaksis şəklində həyata keçirilir. verilmiş dil. Bunu nəzərə alaraq, API-dən istifadə ehtiyacı aşağıdakı variantlarla müəyyən edilir:

  1. Daxili VB funksiyaları kimi tam şəkildə həyata keçirilən API funksiyaları. Buna baxmayaraq, bəzən bu halda API-dən istifadəyə keçmək faydalıdır, çünki bu, bəzən performansı əhəmiyyətli dərəcədə yaxşılaşdıra bilər (xüsusən də ötürülən parametrlərin lazımsız çevrilməsinin olmaması səbəbindən).
  2. Daxili VB funksiyaları yalnız müvafiq API funksiyasının xüsusi halını həyata keçirir. Bu kifayət qədər ümumi seçimdir. Məsələn, CreateDirectory API daxili VB MkDir ifadəsindən daha güclüdür.
  3. Çox sayda API funksiyasının VB dilinin hazırkı versiyasında analoqu yoxdur. Məsələn, VB-dən istifadə edərək kataloqu silə bilməzsiniz - bunun üçün DeleteDirectory funksiyasından istifadə etməlisiniz.

Onu da vurğulamaq lazımdır ki, bəzi API funksiyaları (onların Win API-də payı çox kiçikdir) bir sıra dil məhdudiyyətləri səbəbindən, məsələn, yaddaş ünvanları ilə işləmək qabiliyyətinin olmaması səbəbindən VB proqramlarından çağırıla bilməz. Ancaq bəzi hallarda qeyri-trivial proqramlaşdırma üsulları kömək edə bilər (xüsusən də eyni ünvanlar vəziyyətində).

Müəllifin şəxsi nöqteyi-nəzəri ondan ibarətdir ki, VB-nin daxili funksiyalarını versiyadan versiyaya genişləndirmək əvəzinə, yaxşı təsvirən populyar API funksiyaları. Eyni zamanda, tərtibatçılara görünüşünü gözləməməyi tövsiyə etmək istərdim yeni versiya qabaqcıl funksiyaları olan alətlər və mövcud Win API-nin tərkibinə daha yaxından baxmaq üçün - çox güman ki, sizə lazım olan funksiyalar 1991-ci il buraxılışının VB 1.0 versiyasında artıq tətbiq oluna bilər.

Win API-ni necə öyrənmək olar

Win32 API funksiyalarının sayının 10.000 civarında təxmin edildiyini nəzərə alsaq, bu o qədər də asan sual deyil (dəqiq rəqəmi heç kim bilmir, hətta Microsoft da).

VB (versiya 4-6) Win API bəyannamələrinin təsviri olan faylı ehtiva edir - WIN32API.TXT (daha sonra onun istifadəsi haqqında daha çox). Lakin, birincisi, ondan yalnız istifadə olunan mnemonik adlar vasitəsilə müəyyən funksiyanın məqsədi və onun parametrləri haqqında məlumat əldə etmək üçün istifadə oluna bilər, ikincisi, bu fayldakı funksiyaların siyahısı tam deyil. Bir vaxtlar (yeddi il əvvəl) VB 3.0-da Win16 API-nin funksiyalarını təsvir edən xüsusi yardım faylları var idi. Bununla belə, artıq v.4.0-da rahat interfeysə malik bu faydalı məlumat yoxa çıxıb.

Win32 API haqqında ətraflı məlumatı burada tapa bilərsiniz yardım sistemi Xüsusilə VB 5.0 və 6.0 Enterprise Edition və Office 2000 Developer Edition-a daxil olan MSDN Library CD-lərində olan Platforma Proqram Təminatının İnkişafı Kiti. Ancaq orada lazımi məlumatları tapmaq və anlamaq asan deyil. Oradakı bütün təsvirlərin C dili ilə bağlı verildiyini demirəm.

VB mühitində API proqramlaşdırmasını öyrənmək üçün dünyaca məşhur bələdçi məşhur amerikalı ekspert Daniel Applemanın kitablarıdır. Onun seriyası Den Applemanın Windows API üçün Visual Basic Proqramçı Bələdçisi (Win16, Win32 üçün, tətbiq müxtəlif versiyalar VB) 1993-cü ildən bəri VB proqramçıları üçün bestsellerlərdən biridir. Dan Applemanın 1997-ci ildə buraxılmış Win32 API üçün VB 5.0 Proqramçı Bələdçisi onu kiçik bir əyalət şəhərindəki ilk kitab mağazasında tapan dostu ABŞ-dan müəllifə gətirdi.

Bu kitab 1500-dən çox səhifə uzunluğundadır və ümumi VB API proqramlaşdırma üsullarını, həmçinin 900-dən çox funksiyanı ehtiva edir. Müşayiət olunan CD-ROM-da kitabın tam mətni və bütün proqramlaşdırma nümunələri, həmçinin çap versiyasına daxil edilməyən bir neçə əlavə fəsil var. 1999-cu ildə Dan Appleman sərbəst buraxıldı yeni kitab Dan Applemanın Win32 API Puzzle Kitabı və Təlimatı vizual üçün Başqa 7600 funksiya haqqında məlumatı özündə cəmləşdirən Əsas Proqramçılar (o qədər də geniş olmasa da).

Win API və Dinamik Bağlantı Kitabxanası (DLL)

Win API dəsti dinamik DLL kimi həyata keçirilir. Bundan əlavə, Win API-nin bir hissəsi olan kitabxanaların nümunəsindən istifadə edərək VB mühitində DLL-lərdən istifadə texnologiyası haqqında danışacağıq. Bununla belə, DLL-lər haqqında danışarkən bir neçə vacib şeyi qeyd etmək lazımdır.

Bu halda, DLL dedikdə, tətbiqlərin zəruri prosedurlara - alt proqramlara və ya funksiyalara birbaşa çıxışını təmin edən ikili dinamik kitabxanaların ənənəvi variantını nəzərdə tuturuq (eynilə bu, VB layihəsi daxilində prosedurları çağırarkən baş verir). Belə kitabxanalar müxtəlif alətlərdən istifadə etməklə yaradıla bilər: VC++, Delphi, Fortran, VB istisna olmaqla (7.0 versiyada nələrin görünəcəyini görəcəyik) - sonuncular yalnız OLE Automation interfeysi vasitəsilə daxil olan ActiveX DLL-lərini yarada bilər.

Tipik olaraq, dinamik keçid kitabxana faylları .DLL uzantısına malikdir, lakin bu, heç də lazım deyil (Win16 üçün .EXE genişlənməsi tez-tez istifadə olunurdu); Xarici cihaz sürücüləri .DRV ilə müəyyən edilir.

Artıq qeyd etdiyimiz kimi, Windows API-lərinin və onları ehtiva edən faylların dəqiq sayını müəyyən etmək kifayət qədər çətindir, lakin onların hamısı sistem kataloqunda yerləşir. Bu baxımdan, əməliyyat sisteminin nüvəsinə daxil olan kitabxanaların tərkibini və əsas əlavə funksiyaları olan əsas kitabxanaları ayırmaq daha yaxşıdır.

İndi bir neçə məsləhət.

İpucu 1: DL reklamınızın düzgün formatlaşdırıldığına əmin olun L-prosedurlar

Proqramdakı DLL prosedurlarına edilən çağırış "adi" Visual Basic prosedurları ilə eyni görünür, məsələn:

DllName-ə zəng edin([arqumentlər siyahısı])

Bununla belə, xarici DLL funksiyalarından (Win API daxil olmaqla) istifadə etmək üçün onlar proqramda Declare bəyanatından istifadə edərək elan edilməlidir, bu belə görünür:

Sub LibProcedureName _ “LibraryName” _ [([ArqumentList])] elan edin

Funksiyanı elan et FunctionName _ Lib "LibraryName" _ [([ArqumentList])]

Burada operatorun isteğe bağlı elementləri kvadrat mötərizədə verilir, ifadə dəyişənləri kursivlə, qalan sözlər açar sözlərdir. Yardım sistemində operatorun sintaksisinin kifayət qədər yaxşı təsviri var, ona görə də hələlik biz bir neçə məqama toxunacağıq.

Xarici funksiya bəyannamələri modulun Ümumi Bəyannamələr bölməsində yerləşdirilməlidir. Əgər siz onu forma moduluna yerləşdirirsinizsə, o zaman Private açar sözünü göstərməlisiniz (bu bəyannamə yalnız bu modul daxilində mövcud olacaq) – bu, forma modulunun bütün prosedurları üçün məhdudiyyətdir.

Win32 API dəsti yalnız funksiyalar kimi həyata keçirilir (Win16 API-də çoxlu alt rutinlər var idi). Əksər hallarda bunlar uzun tipli funksiyalardır və ən çox əməliyyatın tamamlanma kodunu qaytarır.

Declare bəyanatı MS Basic-də DOS dövrlərində ortaya çıxdı və o, həm də layihənin daxili prosedurlarını elan etmək üçün istifadə edildi. Visual Basic-də bu tələb olunmur, çünki daxili prosedurların elanı avtomatik olaraq onların Alt və ya Funksiya bəyannaməsidir. Basic/DOS ilə müqayisədə yeni təsvirdə tələb olunan prosedurun yerləşdiyi kitabxana faylının adını qeyd etmək məcburidir. Wip API kitabxanaları Windows sistem kataloqunda yerləşir, ona görə də yalnız fayl adını vermək kifayətdir. Əgər ixtiyari yerdə yerləşən DLL-ə daxil olursunuzsa, bu faylın tam yolunu yazmalısınız.

Declare bəyanatının təsviri adətən kifayət qədər çox yer tutur və kod pəncərəsində bir sətirə sığmır. Buna görə də, ərizə yazarkən bəzi xüsusi xətt qırma sxeminə əməl etməyi tövsiyə edirik, məsələn:

GetTempPath _ Lib "kernel32" Təxəllüsü "GetTempPathA" _ (ByVal nBufferLength As Long, _ ByVal lpBuffer String kimi) funksiyasını elan edin

Bu halda, təsvirin bütün əsas elementləri müxtəlif sətirlərə ayrılır və buna görə də yaxşı oxunur.

İpucu 2: DLL funksiyaları ilə işləyərkən xüsusilə diqqətli olun

Win API-dən və müxtəlif DLL funksiyalarından istifadə VB-nin funksionallığını əhəmiyyətli dərəcədə genişləndirir və çox vaxt proqramların işini yaxşılaşdırır. Bununla belə, bunun əvəzi tətbiqin etibarlılığının azalması riskidir, xüsusən də onun düzəldilməsi prosesində.

VB mühitinin ən vacib üstünlüklərindən biri proqramın hazırlanması prosesinin etibarlılığıdır: tərcüməçinin nəzarəti altında fəaliyyət göstərən proqram kodu nəzəri olaraq poza bilməz. Windows işləyir və VB özü. Proqramçı çağırılan funksiyalara parametrlərin ötürülməsinin düzgünlüyünə çox diqqətli olmaya bilər - belə səhvlər tərcüməçinin özü tərəfindən ya kodun tərcüməsi prosesində, ya da onun icrası zamanı asanlıqla aşkar ediləcəkdir. Ən xoşagəlməz halda, emal rejimi sadəcə olaraq kəsiləcək və səhvin harada və niyə baş verdiyini göstərən bir göstərici ilə.

Windows API funksiyalarından və ya digər DLL-lərdən birbaşa istifadə VB mühitindən kənarda verilənlərin ötürülməsi və kodun icrası üzərində bu cür nəzarəti aradan qaldırır. Buna görə də, xarici funksiyalara daxil olma xətası həm VB-nin, həm də əməliyyat sisteminin işləməməsinə səbəb ola bilər. Bu, xüsusilə proqramın hazırlanması mərhələsində, səhvlərin olması olduqca təbii olduqda doğrudur. Beləliklə, proqramçı sistemin əsas qatının funksiyalarının daha geniş imkanlarını tətbiq etməklə onların tətbiqinin düzgünlüyünə görə məsuliyyət daşıyır.

Problem müxtəlif proqramlaşdırma dillərinin prosedurlar arasında parametrləri ötürmək üçün müxtəlif yollardan istifadə etməsi ilə daha da ağırlaşır. (Daha dəqiq, fərqli yollar keçidlər defoltdur, çünki bir çox dillər bir neçə metodu dəstəkləyə bilər.) Win API-ləri C/C++-da tətbiq olunur və VB-nin istifadə etdiyindən fərqli olan həmin sistemin parametr ötürmə konvensiyalarından istifadə edir.

Bununla əlaqədar olaraq qeyd etmək lazımdır ki, VB-də qurulmuş API funksiyalarının analoqlarının görünüşü sonuncunun VB sintaksisinə uyğunlaşdırılması və müvafiq məlumat mübadiləsinə nəzarət mexanizminin həyata keçirilməsi ilə dəqiq əsaslandırılır. Həmçinin qeyd edək ki, tətbiqin eksperimental sazlanması mərhələsində, icra olunan modul yaratarkən Native Code (maşın kodu) əvəzinə P-kod tərtibi seçimindən istifadə etmək daha yaxşıdır. Birinci halda, proqram tərcüməçinin nəzarəti altında işləyəcək - maşın kodundan daha yavaş, lakin əməliyyat sisteminə mümkün səhv təsirlər baxımından daha etibarlıdır və mümkün səhvləri aşkar etmək üçün daha rahat rejim təmin edir.

İpucu 3: Dan Applemanın VB-də Etibarlı API Proqramlaşdırması üçün On İpucu

API funksiyasından istifadə prosedurları çağırmaq üçün daha çox tanış olmayan bəzi üsullardan istifadə edərək (VB ilə müqayisədə) daha diqqətli proqramlaşdırma tələb edir. Bu məsələləri aşağıda müzakirə etməyə davam edəcəyik. İndi isə Den Applemanın bu mövzu ilə bağlı tövsiyələrinin xülasəsi (onların ilk versiyası 1993-cü ildə ortaya çıxdı), bəzi əlavə və şərhlərimizlə.

1. ByVal-ı xatırlayın.Ən çox ümumi səhv, API və DLL funksiyalarına daxil olarkən həyata keçirilən, yanlış istifadədir açar söz ByVal: ya qoymağı unudurlar, ya da əksinə, lazım olmayanda qoyurlar.

Bu nümunələr ByVal ifadəsinin parametrin keçməsinə təsirini göstərir

Parametr növü ByVal ilə ByVal olmadan
Tam 16 bitlik tam ədəd yığına itələnir. 16 bitlik tam ədədin 32 bitlik ünvanı yığına itələnir.
Uzun 32 bitlik tam ədəd yığına itələnir. 32 bitlik tam ədədin 32 bitlik ünvanı yığına itələnir.
Simli Sətir C-də istifadə olunan formata çevrilir (məlumat və son boş bayt). 32 bitlik ünvan yeni sətir yığının üzərinə itələdi Sətirin VB deskriptoru yığının üzərinə itələnir. (Belə tutacaqlar heç vaxt Windows API-nin özü tərəfindən istifadə edilmir və yalnız VB üçün xüsusi olaraq həyata keçirilən DLL-lərdə tanınır.)

Burada xatırlatmaq lazımdır ki, hər hansı proqramlaşdırma sistemində, o cümlədən VB-də parametrlərin ötürülməsi iki əsas yolla həyata keçirilir: istinadla (ByRef) və ya dəyərlə (ByVal). Birinci halda, dəyişənin ünvanı ötürülür (bu seçim standart olaraq VB-də istifadə olunur), ikincidə - onun dəyəri. Əsas fərq ondan ibarətdir ki, istinadın köməyi ilə ötürülən parametrin dəyişdirilmiş dəyəri çağırış proqramına qaytarılır.

Bunu başa düşmək üçün aşağıdakı proqramlardan istifadə edərək bir sınaq keçirin:

Dim v Tam Ədəd kimi v = 2 MyProc(v) MsgBox “v = “ & v Sub MyProc (v Tam Ədəd kimi) v = v + 1 Son Sub-a zəng edin

Bu nümunəni işlədəndə siz dəyişənin qiyməti 3-ə bərabər olan mesaj alacaqsınız.Fakt budur ki, bu halda çağırış proqramında fiziki olaraq yaradılmış v dəyişəninin ünvanı MyProc alt proqramına ötürülür. İndi prosedurun təsvirini dəyişdirin

Sub MyProc (ByVal v Tam ədəd kimi)

Nəticə olaraq testi yerinə yetirdikdə v = 2 alacaqsınız, çünki prosedura yalnız dəyişənin ilkin qiyməti verilir - onun üzərində aparılan əməliyyatların nəticəsi çağırış proqramına qaytarılmır. Siz həmçinin Zəng bəyanatından istifadə edərək dəyər-dəyər rejimini aşağıdakı kimi dəyişə bilərsiniz:

Sub MyProc (v As Integer) ... MyProc((v)) ‘ (v)-a zəng edin - mötərizələr dəyərdən ötrü _ rejimini göstərir.

Bununla belə, daxili VB prosedurlarına istinad edildikdə, Call bəyanatında ByVal açar sözünün istifadəsi qadağandır - əvəzinə mötərizələrdən istifadə olunur. Bunun öz izahı var.

Klassik halda (C, Fortran, Paskal) ByRef və ByVal rejimləri arasındakı fərq verilənlərin mübadiləsi stekində dəqiq nəyin yerləşdirilməsindən - dəyişənin ünvanından və ya onun dəyərindən asılıdır. Basic tarixən ByVal proqram emulyasiyasının variantından istifadə edir - ünvan həmişə yığında olur, lakin yalnız dəyərə görə keçdikdə bunun üçün müvəqqəti dəyişən yaradılır. Bu iki variantı (klassik və əsas) fərqləndirmək üçün ByVal rejimini təsvir etməyin müxtəlif yollarından istifadə olunur. Qeyd edək ki, ByVal rejiminin VB-də emulyasiyası proqramın daha yüksək etibarlılığını təmin edir: çağırış formasını qarışdırmaqla proqramçı yalnız dəyişənin düzəldilmiş dəyərinin çağırış proqramına qaytarılacağı (və ya qaytarılmaması) riskini daşıyır. "Klassik" versiyada belə qarışıqlıq səbəb ola bilər ölümcül səhv prosedur yerinə yetirildikdə (məsələn, yaddaş ünvanı əvəzinə, məsələn, sıfıra bərabər dəyişən dəyər istifadə edildikdə).

DLL funksiyaları "klassik" prinsiplərə uyğun həyata keçirilir və buna görə də arqumentlərin hər biri ilə məlumatların necə mübadiləsinin məcburi təsvirini tələb edir. Bu bəyannamə təsviri vasitəsilə funksiya bəyannamələrinin məqsədidir (daha dəqiq desək, ötürülən arqumentlərin siyahısı). Parametrləri Windows API və ya DLL funksiyasına ötürməyin ən ümumi yolu ByVal açar sözündən istifadə etməkdir. Üstəlik, həm Declare bəyanatında, həm də birbaşa funksiyaya zəng edərkən təyin edilə bilər.

Yanlış parametr keçidinin nəticələrini proqnozlaşdırmaq asandır. Açıqca etibarsız ünvan alsanız, GPF (Ümumi Qoruma Arızası) mesajı alacaqsınız. Funksiya etibarlı ünvana uyğun bir dəyər alırsa, API funksiyası bütün sonrakı fəlakətli nəticələrlə başqasının sahəsinə (məsələn, Windows nüvəsinə) sürünəcək.

2. Keçirilmiş parametrlərin növünü yoxlayın. Eyni dərəcədə vacibdir, qəbul edilən parametrlərin düzgün sayı və növüdür. Bəyannamədə elan edilən arqumentlər API funksiyasında gözlənilən parametrlərə uyğun olmalıdır. Parametrlərin ötürülməsində ən çox rast gəlinən səhv NULL və sıfır uzunluqlu sətir arasındakı fərqlə bağlıdır - onların eyni şey olmadığını unutmayın.

3. Qaytarma növünü yoxlayın.

VB qaytarma tipli uyğunsuzluqlara olduqca dözümlüdür. dəyər funksiyası, çünki ədədi dəyərlər adətən yığın vasitəsilə deyil, registrlər vasitəsilə qaytarılır. Aşağıdakı qaydalar API funksiyası tərəfindən qaytarılan düzgün dəyəri müəyyən etməyə kömək edəcək:

  • Dəyər qaytarmayan DLL funksiyası ("C"-də etibarsızlığa bənzər) VB Sub kimi elan edilməlidir.
  • tam dəyəri qaytaran API funksiyası (Tam və ya Uzun) ya Sub, ya da müvafiq tipdə dəyəri qaytaran Funksiya kimi müəyyən edilə bilər.
  • API funksiyalarının heç biri üzən nöqtə nömrələrini qaytarmır, lakin bəzi DLL-lər belə bir məlumat növünü qaytara bilər.

4. "Hər kəs kimi" konstruksiyasını böyük ehtiyatla istifadə edin. Bir çox Windows API funksiyaları müxtəlif növ parametrləri qəbul etmək və İstənilən kimi konstruksiyadan istifadə etmək imkanına malikdir (tipin təfsiri ötürülən digər parametrlərin dəyərindən asılı olaraq həyata keçirilir).

Bu vəziyyətdə yaxşı bir həll eyni funksiya üçün iki və ya daha çox bəyannamənin yaradılması ilə bir neçə funksiya ləqəbindən (Alias) istifadə etmək ola bilər və bəyannamələrin hər biri müəyyən bir növün parametrlərini təyin edir.

5. Sətirləri işə salmağı unutmayın. Win API-də məlumatları parametr kimi ötürülən sətir buferlərinə yükləməklə məlumatları qaytaran bir çox funksiya var. Proqramınızda hər şeyi düzgün etdiyiniz kimi görünə bilərsiniz: ByVal haqqında unutmayın, parametrləri funksiyaya düzgün ötürün. Lakin Windows sətir üçün ayrılmış yaddaşın ölçüsünün nə qədər böyük olduğunu yoxlaya bilmir. Sətir, ona yerləşdirilə bilən bütün məlumatları yerləşdirmək üçün kifayət qədər böyük olmalıdır. Düzgün ölçüdə buferin rezerv edilməsi VB proqramçısının məsuliyyətidir.

Qeyd edək ki, 32-bit Windows-da sətirlər sistemin milli parametrləri nəzərə alınmaqla Unicode-dan (iki baytlıq kodlaşdırma) ANSI-yə (bir bayt) və əksinə çevrilir. Buna görə də, buferləri rezerv etmək üçün bəzən sətir dəyişənləri əvəzinə bayt massivlərindən istifadə etmək daha rahatdır. (Bu barədə daha ətraflı aşağıda müzakirə olunacaq.)

Çox vaxt Win API funksiyaları maksimum blok ölçüsünü özünüz təyin etməyə imkan verir. Xüsusilə, bəzən bu, blokun ölçüsünü "istəyəcək" başqa bir API funksiyasını çağırmağı tələb edir. Məsələn, GetWindowTextLength sizə GetWindowText funksiyası tərəfindən qaytarılan pəncərə başlığını yerləşdirmək üçün tələb olunan sətir ölçüsünü müəyyən etməyə imkan verir. Bu halda Windows sizin hüdudlardan kənara çıxmamağınızı təmin edir.

6. Option Explicit istifadə etdiyinizə əmin olun.

7. Parametrlərin dəyərlərini və qaytarılan dəyərləri diqqətlə yoxlayın. VB yaxşı tip yoxlama imkanlarına malikdir. Bu o deməkdir ki, VB funksiyasına etibarsız parametr ötürməyə çalışdığınız zaman baş verə biləcək ən pis şey VB-dən səhv mesajı almağınızdır. Amma bu mexanizm təəssüf ki, Windows API funksiyalarına daxil olduqda işləmir.

Windows 9x əksər API funksiyaları üçün təkmilləşdirilmiş parametr yoxlama sisteminə malikdir. Buna görə də, məlumatlarda bir səhvin olması adətən ölümcül bir səhvə səbəb olmur, lakin buna nəyin səbəb olduğunu müəyyən etmək o qədər də asan deyil.

Burada bu tip səhvləri aradan qaldırmaq üçün bir neçə yoldan istifadə etməyi məsləhət görə bilərik:

  • hər bir şübhəli API funksiya çağırışını yoxlamaq üçün addım-addım sazlama və ya Debug.Print əmrindən istifadə edin. Hər şeyin qaydasında olduğundan və funksiyanın zərif şəkildə çıxdığından əmin olmaq üçün bu zənglərin nəticələrini yoxlayın;
  • CodeView kimi Windows sazlayıcısından və Windows-un sazlama versiyasından (Windows SDK-da təqdim olunur) istifadə edin. Bu alətlər parametr xətasını aşkar edə və ən azı hansı API funksiyasının xətaya səbəb olduğunu müəyyən edə bilər;
  • parametrlərin növlərini və onların dəyərlərinin etibarlılığını yoxlamaq üçün əlavə üçüncü tərəf alətlərindən istifadə edin. Bu cür alətlər nəinki parametr xətalarını tapa bilər, hətta xətanın baş verdiyi VB kodunun xəttini göstərə bilər.

Bundan əlavə, API funksiyasının icrasının nəticəsini yoxlamaq lazımdır.

8. Unutmayın ki, VB-də və Windows-da tam ədədlər eyni şey deyil.Əvvəla, nəzərə almalısınız ki, VB-də "Tam ədəd" termini 16 bitlik nömrəyə, Win 32 sənədlərində - 32 bitlik nömrəyə aiddir. İkincisi, VB-də tam ədədlər (Integer və Long) işarəli dəyərlərdir (yəni bir bit işarə kimi istifadə olunur, qalanları ədədin mantisası kimi istifadə olunur), Windows-da yalnız mənfi olmayan ədədlərdən istifadə olunur. Arifmetik əməliyyatlardan istifadə edərək ötürülən parametri formalaşdırarkən (məsələn, bəzi baza və ofsetin cəmlənməsi ilə ünvanı hesablayın) bu hal nəzərə alınmalıdır. Standart VB arifmetik funksiyaları bunun üçün uyğun deyil. Bu vəziyyətdə necə olmaq, ayrı-ayrılıqda danışacağıq.

9. Funksiya adlarına çox diqqət yetirin. Win16-dan fərqli olaraq, bütün Win32 API funksiyalarının adları kiçik və böyük hərflərin dəqiq istifadəsinə həssasdır (Win16-da belə deyildi). Əgər siz haradasa böyük hərf yerinə kiçik hərfdən istifadə etsəniz və ya əksinə, onda istədiyiniz funksiya tapılmayacaq. Həmçinin, sətir parametrlərini qəbul edən funksiyalarda A və ya W şəkilçisinin düzgün istifadəsinə diqqət yetirin. (Bu barədə daha çox məlumat üçün aşağıya baxın.)

10. İşinizi tez-tez yadda saxlayın. DLL və Win API-nin səhv istifadəsi ilə bağlı səhvlər VB mühitində və bəlkə də bütün əməliyyat sistemində qəzaya səbəb ola bilər. Testdən əvvəl yazdığınız kodun saxlandığından əmin olmalısınız. Ən sadəsi layihəni VB-də işə salmazdan əvvəl layihə modullarını avtomatik qeyd etmək üçün qurmaqdır.

Əvvəlki ipucunu oxuduqdan sonra Win API funksiyalarından istifadənin riskli bir iş olduğunu düşünə bilərsiniz. Müəyyən dərəcədə bu doğrudur, ancaq VB-nin özünün təmin etdiyi təhlükəsiz proqramlaşdırma ilə müqayisədə. Lakin onların bacarıqlı tətbiqi və mümkün tələlər haqqında bilikləri ilə bu risk minimaldır. Bundan əlavə, Win API-nin istifadəsindən tamamilə imtina etmək çox vaxt sadəcə mümkün deyil - onlar hələ də hər hansı bir ciddi inkişaf üçün tələb olunacaq.

Bundan əlavə, daha əvvəl biz geniş DLL sinfi üçün "tələbələr" haqqında danışdıq. Win API vəziyyətində hər şey daha sadədir, çünki bu funksiyaları çağırmaq forması burada aydın şəkildə birləşdirilir. Bunu edərkən aşağıdakı əsas məqamları nəzərə almaq lazımdır:

  1. Win32 API funksiyaları tam olaraq funksiyalardır, yəni Function tipli prosedurlardır (Win16 API-də çoxlu alt rutinlər var idi). Bunların hamısı Long tipli funksiyalardır, ona görə də onların təsvirləri aşağıdakı kimi yazılır: Funksiya adını elan et... Uzun ‘ funksiya növü _ açıq şəkildə müəyyən edilir

    Declare Function name& ‘ funksiya növü _ şəkilçisi ilə müəyyən edilir

    API funksiyasını çağırmaq belə görünür:

Nəticə& = ApiName& ([ ArqumentList]
  1. Çox vaxt funksiyanın qaytarılan dəyəri əməliyyatın çıxış kodudur. Üstəlik, bu vəziyyətdə sıfırdan fərqli bir dəyər normal tamamlama, sıfır - səhv deməkdir. GetLastError funksiyasına zəng edərək, adətən (lakin həmişə deyil) xətanın xarakterini yoxlaya bilərsiniz. Bu funksiyanın təsviri aşağıdakı kimidir: GetLastError & Lib funksiyasını elan et "kernel32" ()

    DİQQƏT! VB-də işləyərkən dəqiqləşdirilmiş xəta kodunun qiymətini almaq üçün Err obyektinin LastDLLerror xassəsindən istifadə etmək daha yaxşı olar, çünki VB bəzən API-yə zəng etməklə proqramın icrasına davam etmək arasında GetLastError funksiyasını sıfırlayır.

    Siz ERROR_ şəkilçisi ilə başlayan adlarla API32.TXT faylında yazılmış sabitlərdən istifadə edərək GelLastError tərəfindən qaytarılan kodu şərh edə bilərsiniz.

    Ən çox tipik səhvlər aşağıdakı kodlara malikdir:

    • ERROR_INVALID_HANDLE = 6& - etibarsız tutacaq
    • ERROR_CALL_NOT_IMPLEMENTED = 120& - Windows 9x-da yalnız Windows NT üçün mövcud olan funksiyaya zəng edin
    • ERROR_INVALID_PARAMETER = 87& - etibarsız parametr dəyəri

    Bununla belə, bir çox funksiyalar bəzi tələb olunan parametrin dəyərini qaytarır (məsələn, OpenFile fayl deskriptorunun dəyərini qaytarır). Belə hallarda xəta bəzi digər xüsusi Qaytarma və dəyəri ilə müəyyən edilir, ən çox 0 və ya -1.

  2. Win32 API-ləri ən sadə məlumat növlərini ötürmək üçün ciddi şəkildə sabitlənmiş yollardan istifadə edir. a) ByVal ... Nə qədər ki

    Uzun dəyişənlər keçən arqumentin ən azı 80%-ni idarə edir. Qeyd edək ki, arqument Həmişə ardınca ByVal açar sözü gəlir ki, bu da başqa şeylərlə yanaşı, VB proqramından API funksiyasına birtərəfli məlumat ötürülməsinin həyata keçirildiyini bildirir.

    B) ByVal ... String kimi

    Bu cür məlumat ötürülməsi də olduqca yaygındır və bir arqumentlə də Həmişə ByVal tətbiq olunur. API funksiyası çağırıldıqda sətirin ünvanı stek üzərinə yazılır, beləliklə, bu halda ikitərəfli məlumat mübadiləsi mümkündür. Simlərlə işləyərkən bir neçə təhlükədən xəbərdar olmaq lazımdır.

    Birincisi, yaddaşın çağırış proqramında sətir üçün ayrılmasıdır, ona görə də API funksiyası sətirləri dolduracaqsa, onu çağırmazdan əvvəl tələb olunan ölçülü sətir yaratmalısınız. Məsələn, GetWindowsDirectory funksiyası tərifinə görə 144 simvoldan çox olmamalı olan Windows qovluğuna gedən yolu qaytarır. Müvafiq olaraq, bu funksiyaya çağırış bu kimi görünməlidir:

    WinPath$ = Space$(144) ' _ 144 simvolda ehtiyat sətir Nəticə& = GetWindowsDirectory& (WinTath$, 144) _ 'bufer doldurma' Nəticə& - kataloq adındakı simvolların faktiki sayı _ WinPath$ = Left$(WinPath, Nəticə&)

    İkinci problem ondan ibarətdir ki, API funksiyası çağırılan zaman mənbə sətri onun hansısa daxili təsvirinə çevrilir və funksiya çıxdıqda isə əksinə. Əgər Win16 zamanı bu əməliyyat yalnız sətrin sonuna null bayt əlavə etməkdən ibarət idisə, Win32-nin gəlməsi ilə iki baytlıq Unicode kodlaşdırmasının ANSI-yə çevrilməsi və əksinə buna əlavə edildi. (Bu barədə “VB-də sətir dəyişənləri ilə işləmək xüsusiyyətləri” məqaləsində, ComputerPress 10'99 və 01'2000-də ətraflı bəhs edilmişdir). Hələlik, sadəcə qeyd edin ki, ByVal ... String konstruksiyasından istifadə etməklə siz yalnız simvol məlumatları ilə sətirləri mübadilə edə bilərsiniz.

    C) ... İstənilən kimi

    Bu o deməkdir ki, bəzi yaddaş bufer ünvanı yığına itələnəcək, məzmunu API funksiyası tərəfindən şərh ediləcək, məsələn, digər arqumentlərin dəyərindən asılı olaraq. Bununla belə, As Any yalnız Declare ifadəsində istifadə edilə bilər - funksiyaya xüsusi çağırış edildiyi zaman xüsusi dəyişən arqument kimi müəyyən edilməlidir.

    D) ... UserDefinedType kimi

    Belə bir tikinti, bəzi strukturlardan istifadə edərək məlumat mübadiləsi (ümumiyyətlə hər iki istiqamətdə) lazım olduqda tez-tez istifadə olunur. Bu konstruksiya əslində As Any transfer formasının konkret icrasının bir növüdür, sadəcə olaraq, bu halda funksiya sabit struktura təyin edilir.

    Məlumat strukturunun forması müəyyən bir API funksiyası ilə müəyyən edilir və onu çağıran proqramda düzgün təsvir etmək və ehtiyatda saxlamaq proqramçının məsuliyyətidir. Belə bir dizayn Həmişə istifadə olunur olmadan sözləri ByVal, yəni bu halda istinadla keçid yerinə yetirilir - dəyişənin ünvanı stekə yazılır.

API funksiyasını çağırmaq nümunəsi

Yuxarıdakıları iki istifadə nümunəsi ilə təsvir edək faydalı xüsusiyyətlər faylları ilə işləmək - aşağıdakı kimi təsvir olunan açmaq və lread:

Funksiya lread Lib “kernel32” _ Alias ​​“_lread” (_ ByVal lpFileName String kimi, _ ByVal wReadWrite As Long) Funksiyanı uzun müddət elan et lread Lib “kernel32” _ Alias ​​“_lread” (_ ByVal h, As Long, lpBuffer İstənilən Kimi, _ ByVal wBytes Kimi Uzun) Kimi Uzun

VB-də onların analoqları - bu halda, dəqiq olanlar - Open və Get operatorlarıdır (İkili rejim üçün). Funksiya elanında Alias ​​açar sözünün istifadəsinə dərhal diqqət yetirək - bu, onsuz edə bilməyəcəyiniz vəziyyətdir. Kitabxanadakı real funksiya adları VB-də icazə verilməyən alt xətt (tipik C üslubu) ilə başlayır.

Faylın açılması əməliyyatı belə görünə bilər:

Const INVALID_HANDLE_VALUE = -1 ' etibarsız _ tutacaq dəyəri lpFileName$ = “D:\calc.bas” ' fayl adı wReadWrite& = 2 ' oxumaq-yazma rejimi hFile& = lopen(lpFileName$, wReadWrite&) _ AND ' faylı müəyyən et = ALVUED Sonra _ ' faylın açılması xətası ' Səhv kodunun müəyyən edilməsi CodeError& = Err.LastDllError 'CodeError& = GetLastError _ ' bu konstruksiya işləmir Bitərsə

Burada iki məqama diqqət yetirmək lazımdır:

  • funksiyanın qiyməti kimi fayl deskriptorunun qiymətini alırıq. Səhv -1 dəyərinə uyğundur;
  • məhz bu halda GetLastError funksiyasına çağırış işləmir - dəqiqləşdirilmiş xəta dəyərini əldə etmək üçün Err obyektinə müraciət etdik (yuxarıda belə bir vəziyyətin mümkünlüyündən danışdıq).

Daha sonra siz faylın məzmununu oxuya bilərsiniz, lakin bu, proqramçının onun strukturu haqqında müəyyən qədər anlayışa malik olmasını nəzərdə tutur (eynilə bu, ixtiyari ikili fayllarla işləyərkən baş verir). Bu halda, lread funksiyasına çağırış belə görünə bilər:

MyVar-ı Tək wBytes kimi Dim = lread (hFile&, MyVar, Len(MyVar) ' oxumaq real rəqəm, 4 bayt ' wBytes - faktiki oxunan məlumatların sayı, ' -1 - xəta... MyStruct x Tək i kimi Tam ədəd Son Növ Dim MyVar MyStruct kimi wBytes = lread (hFile&, MyVar, Len(MyVar)) ' data oxumaq struktur, 6 bayt

Bir daha qeyd edək ki, funksiyaya ikinci arqument istinadla, qalanları isə dəyərlə ötürülür.

MyVar As String MyVar = Space$(10) '10 simvol üçün ehtiyat dəyişən wBytes = lread (hFile&, ByVal MyVar, Len(MyVar)) ' simvol sətirini oxumaq, 10 simvol

Burada əvvəlki nümunədən mühüm fərqi görə bilərsiniz - sətir dəyişəni mütləq ByVal açar sözü ilə müşayiət olunur.

Massivdəki faylın məzmununun oxunması (sadəlik üçün birölçülü bayt massivindən istifadə edəcəyik) aşağıdakı kimi həyata keçirilir:

Dim MyArray(1-dən 10-a) Bayt olaraq wBytes = lread (hFile&, MyArray(1), _ Len(MyArray(1))* 10) ‘ 10 massiv elementini oxuyur

Massivin birinci elementini arqument kimi göstərərək, massiv üçün ayrılmış yaddaş sahəsinin başlanğıcının ünvanını ötürürük. Aydındır ki, massivin istənilən fraqmenti bu şəkildə doldurula bilər:

WBytes = lread (hFile&, MyArray(4), _ Len(MyArray(1))* 5) ' 4-8-ci massiv elementlərini oxuyur

İpucu 5: Transmissiyalar üçün ləqəbdən istifadə edin və istənilən kimi parametrlər

Burada, əvvəlki nümunəyə əsaslanaraq, Den Applemanın dördüncü ucunun mahiyyətini açacağıq.

lread funksiyası ilə işləyərkən yadda saxlamalısınız ki, sətir dəyişəni ilə ona daxil olarkən ByVal açar sözündən istifadə etməlisiniz (əks halda qeyri-qanuni əməliyyat haqqında mesajın qarşısını almaq olmaz). Təhlükəsiz olmaq üçün yalnız sətir dəyişənləri ilə işləmək üçün eyni funksiyanın əlavə xüsusi təsvirini yarada bilərsiniz:

Funksiyanı elan et lreadString Lib "kernel32" _ Alias ​​"_lread" (_ ByVal hFile As Long, ByVal lpBuffer As Long, _ ByVal wBytes As Long) kimi uzun

Bu təsvirlə işləyərkən, daxil olduqda artıq ByVal-ı göstərməyə ehtiyac yoxdur:

WBytes = lreadString (hFile&, MyVarString, _ Len(MyVarString)) '

Deyəsən, Declare operatorunun sintaksisi massiv üçün belə bir xüsusi bəyannamə verməyə imkan verir:

Funksiya lreadString Lib “kernel32” Təxəllüsü “_lread” (_ ByVal hFile As Long, lpBuffer() Bayt kimi, _ ByVal wBytes As Long) kimi uzun

Bununla belə, müraciət

WBytes = lreadArray(hFile&, MyArray(), 10)

qaçılmaz olaraq ölümcül proqram xətasına gətirib çıxarır.

Bu, Visual Basic-də sətir dəyişənlərinin emalının xüsusiyyətləri haqqında söhbətin davamıdır: VB iki baytlıq Unicode kodlaşdırmasından istifadə edir, Win API bir baytlıq ANSI kodlaşdırmasından istifadə edir (üstəlik, C-də qəbul edilmiş formatla, null bayt ilə) Sonda). Müvafiq olaraq, sətir dəyişənlərindən arqument kimi istifadə edildikdə, Unicode-dan ANSI-yə çevrilmə həmişə API funksiyası (daha doğrusu, DLL funksiyası) çağırarkən avtomatik olaraq həyata keçirilir və geri dönərkən tərs çevrilmə.

Buradan çıxış yolu sadədir: Simli dəyişənlər xarakter məlumatlarının mübadiləsi üçün istifadə edilə bilər, lakin onlar ixtiyari ikili məlumat mübadiləsi üçün istifadə edilə bilməz (VB-nin 16-bit versiyalarında olduğu kimi). Sonuncu halda, bir ölçülü bayt massivindən istifadə etmək daha yaxşıdır.

Bildiyiniz kimi, String növü xüsusi strukturu təsvir etmək üçün istifadə edilə bilər. Bununla əlaqədar aşağıdakıları xatırlamaq lazımdır:

  • Win API-ə daxil olmaq üçün aşağıdakı konstruksiyadan istifadə etmək qəti qadağandır: MyStruct x As Single s As String ‘ dəyişən uzunluqlu sətir Son növü yazın.

    Dəyişən uzunluqlu sətir vəziyyətində, proqramın icrası xətası şəklində bütün sonrakı nəticələrlə birlikdə strukturun bir hissəsi kimi sətir deskriptoru ötürülür.

  • Struktur elementi kimi sabit uzunluqlu simdən istifadə edə bilərsiniz: MyStruct x As Single s As String*8 ‘ sabit uzunluqlu sətir Son Növ

Bu halda, müvafiq kodlaşdırma çevrilməsi həyata keçirilir.

Və son qeyd: heç bir halda API funksiyasına daxil olarkən simli dəyişənlər massivindən (həm sabit, həm də dəyişən uzunluqdan) istifadə edə bilməzsiniz. Əks halda “qanunsuz əməliyyatın” ortaya çıxmasına təminat veriləcək.

Çox güman ki, öz DLL funksiyalarınızı yazmağınız lazım olan bir vəziyyətiniz olacaq. Qarışıq proqramlaşdırma texnologiyasından - bir tətbiqi həyata keçirmək üçün iki və ya daha çox proqramlaşdırma dilindən istifadə etsəniz, buna ehtiyac qaçılmaz olaraq yaranacaqdır.

Bununla əlaqədar olaraq qeyd edirik ki, qarışıq proqramlaşdırma kifayət qədər mürəkkəb tətbiqin həyata keçirilməsi üçün kifayət qədər geniş yayılmışdır. Həqiqətən də, hər bir dilin (daha doğrusu, dilə əsaslanan proqramlaşdırma sisteminin) özünəməxsus güclü və zəif tərəfləri var, ona görə də müxtəlif problemlərin həlli üçün müxtəlif alətlərin üstünlüklərindən istifadə etmək kifayət qədər məntiqlidir. Məsələn, VB - istifadəçi interfeysinin yaradılması üçün, C - sistem resurslarına səmərəli çıxış üçün, Fortran - ədədi alqoritmlərin həyata keçirilməsi üçün.

Müəllifin fikri belədir: istənilən ciddi proqramlaşdırma tərtibatçıdan ən azı iki alətə sahib olmağı tələb edir. Təbii ki, bugünkü aydın əmək bölgüsü şəraitində iki sistemdə belə əla mütəxəssis olmaq çox çətindir, ona görə də “əsas və köməkçi dillər” sxemi daha məntiqlidir. Buradakı fikir ondan ibarətdir ki, hətta "köməkçi" dildə (kifayət qədər sadə prosedurların yazılması) bir qədər bilik də "əsas" dilin səmərəliliyini xeyli artıra bilər. Qeyd edək ki, ən azı köməkçi kimi VB bilikləri bu gün peşəkar proqramçı üçün demək olar ki, məcburi tələbdir. Yeri gəlmişkən, DOS dövründə istənilən proqramçı, o cümlədən Basic üçün Assembler-in əsaslarını bilmək çox arzuolunan idi.

Bu və ya digər şəkildə, lakin qrup işi şəraitində belə, hər bir proqramçı öz xüsusi işi ilə məşğul olduqda, bütün layihə iştirakçıları müxtəlif dillərdə prosedur interfeysinin xüsusiyyətləri haqqında təsəvvürə malik olmalıdırlar. Və bilmək lazımdır ki, bir çox proqramlaşdırma sistemləri (o cümlədən VB), standart interfeysə əlavə olaraq, interfeysi başqa bir dilə uyğunlaşdırmağa imkan verən prosedurları çağırmaq üçün digər genişləndirilmiş metodlardan istifadə etməyə imkan verir.

Prosedurlararası interfeysi öyrənərkən aşağıdakı mümkün "tələlərə" diqqət yetirməlisiniz:

  • Fərqli dillər identifikatorların yazılması üçün fərqli konvensiyalardan istifadə edə bilər. Məsələn, VB-də icazə verilməyən prosedur adının əvvəlində alt xəttdən istifadə etmək adi haldır. Bu problem Declare ifadəsindəki Alias ​​açar sözündən istifadə etməklə asanlıqla həll olunur (məsələn, İpucu 2-3-ə baxın).
  • Yığına ötürülən arqumentlərin yazılmasının fərqli ardıcıllığından istifadə edilə bilər. Məsələn, DOS günlərində (düzünü desəm - indi Windows mühitində necə göründüyünü bilmirəm) C siyahının sonundan arqumentlər yazdı, digər dillər (Fortran, Pascal, Basic ) - başdan.
  • Varsayılan olaraq istifadə olunur müxtəlif prinsiplər keçid parametrləri - istinad və ya dəyərlə.
  • Sətir dəyişənlərinin saxlanması üçün müxtəlif prinsiplər. Məsələn, C-də (eləcə də Fortran və Paskalda) sətirin uzunluğu onun sonundakı null baytla müəyyən edilir, Basic-də isə uzunluq sətir deskriptorunda açıq şəkildə yazılır. Əlbəttə ki, istifadənin mümkünlüyünü nəzərə almaq lazımdır müxtəlif kodlaşdırmalar personajlar.
  • Çoxölçülü massivləri köçürərkən yadda saxlamaq lazımdır ki, çoxölçülü strukturları birölçülüyə çevirmək üçün müxtəlif variantlar mövcuddur (birinci indeksdən və ya sonuncudan başlayaraq, iki ölçülü massivlərə münasibətdə - “sətirlər üzrə” və ya “sütunlarla” ”).

Bunu nəzərə alaraq, aşağıdakı tövsiyələri vermək olar:

  • Arqumentləri DLL funksiyalarına ötürmək üçün ən sadə, sübut edilmiş yollardan istifadə edin. Win API üçün qəbul edilmiş standartlar bir model kimi olduqca uyğundur.
  • Heç vaxt sətir dəyişənlərinin massivlərini keçirməyin.
  • Sadə simli dəyişənləri və çoxölçülü massivləri ötürərkən çox diqqətli olun.
  • Çağırılan prosedura və ondan arqumentlərin ötürülməsi mexanizminin funksionallığını xüsusi şəkildə yoxladığınızdan əmin olun. Məlumat ötürülməsini yoxlamaq üçün fərdi test yazın. Hər bir arqumentin düzgün ötürüldüyünü ayrıca yoxlayın. Məsələn, bir neçə arqumenti olan bir prosedurunuz varsa, əvvəlcə bir arqumentli variant üçün hər bir parametrin ötürülməsinin düzgünlüyünü yoxlayın və yalnız bundan sonra - bütün siyahı üçün.

Bəs əgər DLL funksiyası, məsələn, Fortran-da artıq yazılıbsa, lakin onun giriş interfeysi yuxarıda göstərilən VB standartlarına çox uyğun gəlmirsə? Burada iki məsləhət var. Birincisi: sınaq DLL funksiyasını yazın və sınaq və səhv yolu ilə VB proqramından düzgün zəngi tapmaq üçün ondan istifadə edin. İkincisi: eyni Fortran-da sadə verilənlər strukturlarının mürəkkəb olanlara çevrilməsi (məsələn, çoxölçülü bayt massivini sətir massivinə çevirmək) ilə VB və DLL funksiyası arasında sadə interfeysi təmin edən adapter prosedurunu yazın.

Beləliklə: DLL funksiyalarından istifadə edin. Amma ayıq ol...

ComputerPress 9 "2000

API-lər eyni zamanda həm əyləncəli, həm də sinir bozucu ola bilər. Bir tərəfdən, digər proqramlarla qarşılıqlı əlaqə quraraq, siz tamaşaçıların əhatə dairəsini və tətbiqinizin "vay effektini" xeyli artıra bilərsiniz. Digər tərəfdən, bu, tonlarla sənədin oxunması, autentifikasiya strategiyaları haqqında öyrənilməsi və məlumatsız (və ya hətta itkin) səhv mesajlarının təhlilini əhatə edir.

Əvvəla, əgər siz hələ də API-nin (Tətbiq Proqramlaşdırma İnterfeysi) nə olduğunu tam başa düşmürsünüzsə, Skillcrush-un izahatını və sonra bu məqalənin birinci hissəsini oxuyun.

"API" inanılmaz dərəcədə geniş anlayışdır - hər dəfə tətbiqiniz başqa proqramla "danışanda" bir növ API vasitəsilə olur. Rails-in müxtəlif hissələri kimi öz tətbiqinizdəki komponentlər də API vasitəsilə bir-biri ilə əlaqə saxlayır. Onlar hər birinin öz xüsusi tapşırıqlarını yerinə yetirmək üçün lazım olan məlumatları ötürən az və ya çox müstəqil alt proqramlardır. Tətbiq dünyasında hər şey API-dir!

Daha dinamik frontend funksionallığı olan proqramlar yaratdığınız zaman (həm tək səhifəlik Javascript proqramları, həm də ayrıca AJAX zəngləri olan sadə proqramlar), onlar Rails backend ilə öz API vasitəsilə əlaqə saxlayacaqlar ki, bu da həqiqətən əlavə bir xətt və ya üç koddur. . , bu nəzarətçilərinizə HTML əvəzinə JSON və ya XML-ə necə xidmət göstərəcəyini izah edir.

Bu dərslikdə siz öz API yaratmağı öyrənəcəksiniz. Sonrakı dərslərdə biz digər tətbiqlərin API-ləri ilə necə qarşılıqlı əlaqə quracağımızı əhatə edəcəyik. Dərslər bu mövzunu öyrənmək üçün yaxşı tramplin olmalıdır, lakin çətin ki, bütün halları tam əhatə edə bilsin. API-lərlə işləməyin böyük bir hissəsi onların sənədlərini oxumaq və sizdən nə istədiklərini anlamaqdır.

Düşüncə üçün nöqtələr

Sualları nəzərdən keçirin və cavabları bildiyinizə baxın. Tapşırığı yerinə yetirdikdən sonra özünüzü yenidən yoxlayın.

  • HTTP sorğusu göndərdiyiniz zaman Rails cavab olaraq hansı növ faylı gözlədiyinizi necə başa düşür.
  • #cavab_metodunun məqsədi nədir?
  • Həmin obyektə daxil edilməsini istəmədiyiniz atributları göstərərkən istifadəçi obyektini (İstifadəçi) necə qaytarırsınız (yəni, sadəcə User.first-i qaytara bilməzsiniz)?
  • #to_json metodunun pərdə arxasında 2 addımı adlandırın.
  • Nəzarətçi fəaliyyətinə yalnız səhv mesajı verməsini necə deyə bilərəm?
  • Öz səhv mesajınızı necə yaratmaq olar?
  • API ilə proqram əlaqəsinə icazə vermək istəyirsinizsə, niyə sessiya əsaslı nəzarətçi identifikasiyası üsullarından istifadə edə bilmirsiniz?
  • "Xidmət yönümlü arxitektura" nədir?

API Əsasları

Sizin Rails tətbiqiniz əslində artıq API-dir, baxmayaraq ki, siz onu API kimi düşünməyə bilərsiniz. İstifadəçilərinizin işə saldığı veb-brauzer də bir proqramdır, ona görə də istifadəçi yeni səhifə açdıqda o, əslində Rails tətbiqinizə API sorğusu göndərir. Biz bu cür düşünməyə meylliyik, çünki HTML şablonlarının göstərilməsi o qədər ümumi işdir ki, biz bu funksiyanı standart cavab növü kimi server proqramlarımıza kodlaşdırırıq və qalan hər şeyi qeyri-adi bir şey hesab edirik.

Bununla belə, tez-tez brauzerdən istifadənin bütün baş ağrılarından keçməyinizi tələb etməyən bir sorğu etmək istəyirsiniz. Səhifənin strukturuna (HTML) əhəmiyyət verməyə bilərsiniz, lakin bunun müqabilində təmiz məlumat istəyirsiniz. Tutaq ki, siz bütün istifadəçilərin siyahısını əldə etmək istəyirsiniz. Siz http://yourapplication.com/users kimi bir şey tələb edə bilərsiniz, bu, çox güman ki, #index əməliyyatını işə salacaq və tətbiqin bütün istifadəçilərinin siyahısını təqdim edəcək.

İstədiyiniz yalnız istifadəçilərin siyahısı olduğu halda niyə bütün bu əlavə məlumatlarla narahat olursunuz? Ən sadə seçim, bunun müqabilində JSON və ya XML cavabının gözləntisini təyin edərək, eyni URL-yə sorğu göndərmək olardı. Rails kontrollerinizi düzgün qursanız, bütün istifadəçiləri ehtiva edən sadə JSON massivi obyektini geri alacaqsınız. Əla!

Xarici API ilə əlaqə qurarkən eyni prinsip tətbiq olunur. Tutaq ki, siz Twitter-dən istifadəçinin son “tvitlərini” almaq istəyirsiniz. Sizə lazım olan tək şey Rails tətbiqinizə Twitter API ilə necə qarşılıqlı əlaqə quracağınızı bildirmək (yəni, özünüzü təsdiqləmək), sorğu göndərmək və geri qaytarılacaq "tvitlər" dəstini emal etməkdir.

API yaradılması

Siz Rails tətbiqinizi front-end veb-səhifələr üçün təmiz arxa-end API etmək istəyə bilərsiniz və ya sadəcə olaraq front-end tələb etdikdə JSON-u necə göndərəcəyinizi öyrənmək istəyə bilərsiniz. Bu bölmə autentifikasiya funksiyası ilə tam hüquqlu RESTful API-lərin necə yaradılacağını əhatə etməyəcək. Bu, tətbiqinizi API kimi qəbul etmək üçün hamar bir girişdir.

Əsaslar

Əgər siz Rails proqramınızın HTML əvəzinə JSON-u qaytarmasını istəyirsinizsə, nəzarətçinizə bunu deməlisiniz. Əla şey budur ki, eyni nəzarətçi hərəkəti qayıda bilər Müxtəlif növlər istifadəçinizin normal brauzer sorğusu edib etməməsindən və ya komanda xətti ilə API-yə daxil olub-olmamasından asılı olaraq. Bu, example.xml və ya example.json kimi tələb olunan faylın genişləndirilməsi əsasında hansı növ sorğunun edildiyini müəyyən edir.

Siz server jurnalını yoxlayaraq Rails-in gözlədiyiniz faylın növü haqqında nə düşündüyünü yoxlaya bilərsiniz:

2013-12-02 15:21:08 -0800-də 127.0.0.1 üçün "/posts/new" GET başladıldı -0800 PostsController tərəfindən işlənir#new HTML kimi

Birinci sətir sizə hansı URL-nin tələb olunduğunu, ikincisi isə onun hara yönəldildiyini və Rails-in onu necə idarə etdiyini bildirir. .json uzantısından istifadə etsəniz, bu belə görünəcək:

2013-12-04 12:02:01 -0800 tarixində 127.0.0.1 üçün "/posts.json" GET başladıldı -0800 PostsController#index tərəfindən JSON olaraq işlənir

Əgər test proqramınız varsa, müxtəlif URL-lər tələb etməyə çalışın. Əgər nəzarətçiniz onları necə idarə edəcəyini bilmirsə, onda siz xəta ala bilərsiniz, lakin siz hələ də Rails-in sorğularınızdan nə başa düşdüyünü görə bilməlisiniz.

JSON və ya XML göstərilməsi

JSON və ya XML ilə cavab vermək istədiyinizə qərar verdikdə, nəzarətçinizə HTML əvəzinə JSON və ya XML-i göstərməyi deməli olacaqsınız. Bunun bir yolu #respond_to metodundan istifadə etməkdir:

Class UsersController< ApplicationController def index @users = User.all respond_to do |format| format.html # index.html.erb format.xml { render xml: @users } format.json { render json: @users } end end end

Bu halda #respond_to format obyektini bloka ötürür ki, ona uyğun render çağırışı əlavə edə bilərsiniz. Əgər siz heç nə etməsəniz, html standart Rails şablonundan istifadə etməklə göstəriləcək (bu nümunədə app/views/index.html.erb).

#render funksiyası müxtəlif formatların necə göstəriləcəyini anlamaq üçün kifayət qədər ağıllıdır. Siz ona açarı ötürəndə:json, o, dəyərinə görə #to_json çağıracaq bu misal@istifadəçilərə. Bu, Ruby obyekt(lər)inizi sorğu edən tətbiqə ötürüləcək JSON sətirlərinə çevirəcək.

API-nizi belə əldə edirsiniz. Əlbəttə ki, bəzi zərif işlər görmək istəyirsinizsə, API yaratmaq bir az daha mürəkkəb ola bilər, lakin hər şey əsaslarla bağlıdır.

Qaytarma atributlarının təyin edilməsi

Tutaq ki, siz İstifadəçi obyekti ilə birlikdə istifadəçinin e-poçt ünvanını qaytarmadığınızdan əmin olmaq istəyirsiniz. Bu halda, siz #to_json metodunun nə etdiyini dəyişdirərək geri qaytarılacaq atributları dəyişdirmək istəyə bilərsiniz.

Əvvəllər siz sadəcə olaraq #to_json metodunu öz versiyanızla əvəz edərdiniz, lakin indi buna ehtiyac yoxdur - əslində, bunun əvəzinə #as_json metodunu ləğv edirsiniz. #as_json metodu #to_json metodunda istifadə olunur, ona görə də onun dəyişdirilməsi #to_json nəticəsini qeyri-müəyyən şəkildə dəyişir, lakin kifayət qədər spesifik şəkildə.

#to_json 2 işi görür: #as_json-u işə salır və JSON-a göstəriləcək atributların hashını alır. Daha sonra ActiveSupport::json.encode istifadə edərək JSON-a təqdim edir. Beləliklə, #as_json dəyişdirməklə, siz #to_json metodunun həqiqətən dəyişmək istədiyiniz hissəsi haqqında daha dəqiq olursunuz.

Bizim vəziyyətimizdə, biz bunu yalnız bizə lazım olan atributları qaytarmaq üçün modelimizdə #as_json dəyişdirərək edirik:

# app/models/user.rb sinif İstifadəçi< ActiveRecord::Base # Вариант 1: Полное переопределение метода #as_json def as_json(options={}) { :name =>self.name ) # E-poçtun son sahəsini DAXİL ETMƏYİN # Seçim 2: İstifadə edin standart üsul#as_json def as_json(seçimlər=()) super(yalnız: [:ad]) son

Sonra nəzarətçimizdə bizə lazım olan tək şey JSON-u normal şəkildə göstərməkdir (aşağıdakı nümunə HTML sorğusunun göndərilib-göndərilməməsindən asılı olmayaraq həmişə JSON-u qaytaracaq):

# app/controllers/users_controller.rb sinif UsersController< ApplicationController def index render json: User.all end end

Nəzərə alın ki, #render istifadə edərkən özünüzə #to_json zəng etməyinizə ehtiyac yoxdur - bu sizin üçün edəcək.

Bəzən Heroku səhv səhifələrinizi düzgün göstərmək üçün əlavə addımlar tələb edə bilər. Bax. Əvvəlcə tətbiqdən/ictimai kataloqdan statik səhifələri silməli ola bilərsiniz.

Kənardan təminat

Tutaq ki, siz API-yə girişə yalnız istifadəçi daxil olduqda icazə vermək istəyirsiniz. Mövcud nəzarətçi identifikasiyası artıq öz işini görür - sadəcə olaraq düzgün #əvvəl_fəaliyyət dəstinə malik olduğunuzdan əmin olun (məsələn, fəaliyyətdən_əvvəl:girişi tələb edin). Siz həm daxil olmuş, həm də daxil olmayan istifadəçilərin səhifəyə baxa biləcəyi funksionallıq istəyə bilərsiniz, lakin hər biri fərqli məlumatları görməlidir. Daxil olmayan istifadəçilərin həssas məlumatları əldə etmək üçün API sorğuları edə bilməsini istəmirsiniz. Eyni şəkildə, icazəsiz istifadəçilərin müəyyən HTML səhifələrinə daxil olmasına icazə vermək istəmirsiniz.

Brauzer olmayan proqramdan (məsələn, komanda xətti), siz autentifikasiya üçün brauzer kukilərinə etibar edə bilməzsiniz. Buna görə də əksər API-lər autentifikasiya prosesinin bir hissəsi kimi yerli tokenlərdən istifadə edir. Növbəti dərsdə tokenlər haqqında bir az daha danışacağıq.

Növbəti addımlar

İndi siz yalnız HTML deyil, istənilən digər formata xidmət etmək üçün Rails proqramından istifadə etmək bacarığınız var. Əgər siz daha da irəli getmək və digər tərtibatçılara platformanızdan istifadə edərək şeylər qurmağa icazə vermək istəyirsinizsə (məsələn, istifadəçi kimi autentifikasiya əvəzinə proqram sorğuları edə bilsinlər), siz API sisteminizi daha təhlükəsiz etməli olacaqsınız. Bütün bunları burada əhatə etməyəcəyik, lakin aşağıdakıları yoxlayın:

  • Awesome Rails API-lərinin qurulması məqaləsi oyuncaq proqramından sənaye standartı API-lərə keçmək üçün ən yaxşı yanaşmaların çoxunu təsvir edir.

Xidmət yönümlü memarlıq

Xidmət Oriented Architecture (SOA) adlı memarlıq yanaşmasını təqdim etməyin vaxtıdır. Əsas ideya ondan ibarətdir ki, ərizəniz bir çox xidmətlərdən ibarət olacaq, məsələn, ödəniş sistemi, istifadəçi qeydiyyatı, tövsiyə modulu və s. Hamısını bir əsas proqram daxilində qurmaq əvəzinə, siz daxili API-lərdən istifadə edərək bir-biri ilə qarşılıqlı əlaqədə olan alt sistemləri tamamilə müstəqil parçalara ayırırsınız.

Bu bir çox səbəbə görə yaxşıdır. Tətbiqinizin hər bir parçasının digər hissələrin necə işlədiyinə əhəmiyyət vermədiyini və yalnız onların API vasitəsilə məlumat tələb etməyi bildiyini təmin etməklə, siz xidmət kodunda əhəmiyyətli dəyişikliklər edə bilərsiniz və tətbiqin qalan hissəsi əvvəlki kimi işləyəcək. Siz bir xidməti digəri ilə tamamilə əvəz edə bilərsiniz və o, eyni API metodlarından istifadə edərək ünsiyyət qurduqca, o, çox rahat keçəcək. Özünüzü yazmaq əvəzinə xarici API-ləri tətbiqinizin bir hissəsi kimi (məsələn, ödəniş prosessorları) istifadə edə bilərsiniz. Rails proqramı ilə qarşılıqlı əlaqədə olan Python proqramı ilə qarşılıqlı əlaqədə olan PHP proqramı yarada bilərsiniz və hər şey işləyəcək, çünki onlar API-dən istifadə edərək bir-biri ilə əlaqə saxlayırlar.

Ümumiyyətlə, ərizənizin hər bir hissəsini mümkün qədər müstəqil saxlamağa çalışmaq yaxşı fikirdir. SOA konsepsiyası, tətbiqinizin digər hissələrinə hansı üsulları təqdim etmək istədiyinizi düşünməyə təşviq edir və bu, kodunuzu yol boyu daha yaxşı hala gətirəcəkdir. Bundan əlavə, tətbiqinizin hər bir əsas komponentinin müstəqil olduğunu fərz etməklə siz problemləri daha asan təcrid edə və səhvləri daha ağıllı idarə edə bilərsiniz.

Bütün proqram üçün xidmət yönümlü arxitekturadan istifadə etmək nəhəng, mürəkkəb Ruby skriptini yalnız daha geniş miqyasda uyğunsuz siniflərə və metodlara bölmək kimidir.

Xidmət yönümlü arxitekturaya keçidin ən məşhur hallarından biri Amazon.com-dur. 2002-ci ildə bir gün Jeff Bezos açıq şəkildə bütün işçi qruplarının SOA-ya keçməli və ya işdən çıxarılmalı olduğunu söylədi. Notariat blog yazısı daxili məqsədlər üçün nəzərdə tutulmuş, lakin təsadüfən ictimaiyyətə açıqlanan bir Google əməkdaşı, SOA-dan istifadə edən Amazonun gücündən danışdı. Bu əla oxuyur, ona görə də onu qiymətləndirin, lakin Bezosun məktubunun əsas tezisləri postdan aşağıdakı sitatlarda çıxarılıb:

1) Bütün əmrlər indi öz məlumatlarını və funksionallığını xidmət interfeysləri vasitəsilə təmin edir.

2) Komandalar bir-biri ilə bu interfeyslər vasitəsilə əlaqə saxlamalıdırlar.

3) Proseslərarası əlaqənin digər formaları qadağandır: birbaşa keçidlərin olmaması, başqa komandadan verilənlərin birbaşa oxunması, paylaşılan yaddaş modelləri, “arxa qapılar” və s. Ünsiyyət qurmağın yeganə icazə verilən yolu şəbəkə üzərindən xidmət interfeysinə daxil olmaqdır.

4) Hansı texnologiyadan istifadə etmələrinin əhəmiyyəti yoxdur. HTTP, Corba, Pubsub, yerli protokollar - fərqi yoxdur. Bezosun vecinə deyil.

5) İstisnasız olaraq bütün xidmət interfeysləri ilkin olaraq xaricdən idarə olunmaq imkanı ilə dizayn edilməlidir. Yəni, komanda şirkətdən kənar tərtibatçılara interfeys təqdim edə bilmək üçün planlaşdırmalı və dizayn etməlidir. İstisna yoxdur.

6) Bu tələblərə məhəl qoymayan hər kəs işdən çıxarılacaq.

SOA ciddi bir işdir. Əlbəttə ki, ondan istifadə edərkən ortaya çıxan bir çox problem var - Amazonun "öyrənilmiş dərsləri"ndə bu yazıya baxın - lakin onun inanılmaz faydaları var.

Yəqin ki, özünüz üçün "oyuncaq" proqramları hazırlayarkən SOA ilə bağlı çox narahat olmayacaqsınız, lakin bu sual bir İT şirkəti üçün işə başladığınız zaman mütləq ortaya çıxacaq, ona görə də onunla tanış olmaq yaxşı təcrübədir.

Məqsədiniz

  1. JSON və XML göstərilməsi haqqında öyrənmək üçün Controllers üçün Rails Bələdçisinin 7-ci bölməsini oxuyun.
  2. Onlara baxmaq tələb olunmur (çünki onlar hazır olduğumuzdan bir qədər irəli gedir), lakin maraqlanırsınızsa, haqqında ətraflı öyrənmək üçün təlimatın altındakı Əlavə Resurslar bölməsindəki Railscasts-a nəzər salın. API-nin üstünlükləri.

Nəticə

Javascript kursu zamanı API kimi tətbiqinizlə daha sıx işləyəcəyik. Bu kursda siz daha yaxşı istifadəçi təcrübəsi üçün AJAX çağırışlarından istifadə edən bir neçə tam stack tətbiqi yaradacaqsınız ki, bu da əslində tam HTML səhifəsi əvəzinə XML və ya JSON məlumatlarının göstərilməsini nəzərdə tutur. Sonra siz verilənlər bazasından lazım olan bütün məlumatları əldə etmək üçün Rails tətbiqiniz tərəfindən təmin edilən API-yə əsaslanan bir neçə tək səhifəlik Javascript proqramı yaradacaqsınız və əks halda müştəri tərəfində (brauzerdə) işləyəcəksiniz.

API ilə məşğul olmağın ən yaxşı yolu onu yaratmaq və onunla qarşılıqlı əlaqədə olmaqdır ki, biz layihələrimizdə buna diqqət yetirəcəyik.