Uygulama programı arayüzü. API nedir? API işlevleri

Erken ya da geç; herhangi bir programcı aşağıdaki gibi kavramlarla karşılaşır: API'si. Ancak böyle bir tepki ortaya çıkarsa herkes bunun ne olduğunu, gerekli olduğunu ve nasıl vikorize edileceğini bilmiyor. Ve bu yazıda sizlerden gelen eylem bilgisindeki bu boşluğu dolduracağım ve aynı zamanda kendi pratiğimi de uygulayacağım.

API'si (uygulama programlama Arayüzü) - bu uygulama programlama Arayüzü. Başka bir deyişle, basit bir ifadeyle, diğer programlarda kullanılabilecek bir dizi farklı fonksiyon, sabit, sınıf, sorgu formatı vardır.

Bana ne olduğunu söyleyebilirsin API'si- bu, uygulamasını bilmediğimiz bir tür nesne, onu ancak vikorize edebiliriz. Örneğin, bilgisayar, uygulanmasını çok az insanın bildiği bir nesnedir, ancak her türlü yolla araştırılabilir: video izlemek, internette gezinmek, diğer metinler vb. Her şey nasıl çalışıyor - çok az kişi biliyor ama herkes çalışamıyor.

popo API'siє Windows API'si, OpenGL API'si, Direct3D API'si Ve benzeri.

Mesela son zamanlarda kendimi ortada sıkışıp kalmış buldum. API'si. Posta hizmetine kaydoldum SmartResponder.ru Ve e-posta listesinin başlatılmasıyla insanlar abone olmaya başladı. Zorluk geldi: İnsanlar ulaşıp abone olarak düşük maliyetli bir video kursuna sahip olabilirler. SmartResponder.ru", ardından birincil erişim (örneğin, aracılığıyla) Veritabanı) Bu verilere aşina değilim, ancak bunları uygulamak gerekiyordu. Çok şükür" SmartResponder.ruє güçlüsün API'si, Ben de bu kadar çabukum.

ben onları tanıyorum API'siÖn ödeme tarihini girmek için biçimi girin. Dali aracılığıyla Kıvrılma Belirli bir tarih için gerekli girişi doldurdum ve gerekli ön ödeme tarihini kaldırdım e-posta adresi. Sonucun işlenmesi ve görüntülenmesi için standart bir prosedür aşağıdadır.

Leonid Yakuboviç 26 Kasım 2012 yaklaşık 13:59

API nedir?

  • Kereste odası *

Uçuyorum!
Bu yazımızda API'nin ne olduğuna, nasıl olduğuna ve neden kullanıldığına bakacağız. Ayrıca API’nin web uygulamalarınızda nasıl kullanılabileceğine ve bir programcının hayatını nasıl kolaylaştırabileceğinize de bakalım.

Neyse randevuyu bitirelim. API (Uygulama Programlama Arayüzü) – bu bir programlama arayüzü, bir oluşturma programı arayüzüdür. Bilgelerime dedikleri gibi API, programın hayatını kolaylaştıracak hazır bir koddur. API, programcının diğer programların (örneğin işlevler) kod yazmasını gerçekten kolaylaştırması için oluşturuldu. Tüm jQuery bilgisi, JavaScript'te yazma ve ayrıca bir çeşit API. Gördüğünüz gibi jQuery kod yazmayı çok daha kolaylaştırıyor. Temel JavaScript kullanılarak 30 satırda üretilebilenler 5-6'da jQuery kullanılarak yazılabilir. API'ye bir bakışta bakarsanız geliştirilebilecek birçok hizmeti bulabilirsiniz. Günümüzün en popüler hizmeti neredeyse yüzlerce farklı API sağlayan code.google.com'dur! Buna Android eklentileri oluşturmaya yönelik bir arayüz, AJAX ile çalışmaya yönelik çeşitli API'ler ve ihtiyaçlarınıza uyacak şekilde kolayca ayarlanabilen çeşitli API eklentileri dahildir.

Kendi ellerinizle kod yazmak nasıl bir duygu? Halihazırda yaratılmış olanın üzerinde çalışmak gerekli mi? Web geliştirmeden maliyetsiz çözümler (ve aslında ücretsiz yardım) görmek mümkün mü? Bu soruya "НІ" yanıtını verdiyseniz API'nin özünü anladığınızı düşünün.

Hala kendimi yıkamak istiyorum. Kıymıklar hazır çözümlerle uğraşmamalı, gelecekte parçalar gerçek görevlere müdahale etmeyecektir. Yani eğer acemi bir programcıysanız fabrikayı vikorize etmeyin! Kendi kafanızla düşünmeye başlayın, programlamanın özünü anlamak için farklı algoritmalar olacaktır. Ayrıca herkesin zaten API'nin hazır bir çözüm değil, bir orta yol, kendi projelerinizi oluşturmak için bir arayüz olduğuna ikna olduğunu da söylemek isterim. Marketten dondurulmuş pirzola yemiyor musunuz? Bunları hemen yağlamalısınız, değil mi? Bu benzetme API'nin özünü açıkça göstermektedir.

Zagalom, API'nin ne olduğunu, nerede ve nasıl kullanıldığını, en önemlisi ne için kullanıldığını öğrendim. Umarım web programlamanın gelişimini ve daha da büyük derinliklerin anlaşılmasını benimsersiniz!

Windows API - bir dizi işletim sistemi işlevi

API kısaltması birçok acemi programcı için belirsiz ve kafa karıştırıcı görünmektedir. Aslında Uygulama Programlama Arayüzü (API), eklenti satıcıları tarafından kullanılabilecek hazır bir işlevler kümesidir. Resmi anlamda bu kavram, daha önce sıklıkla alt program kitaplığı olarak adlandırılan şeye eşdeğerdir. Ancak API'nin altında bu tür kitaplıkların özel bir kategorisinin bulunduğunu lütfen unutmayın.

Geliştirme süreci sırasında, son kullanıcı için belirli bir programın uygulanması için gerekli olan ve MyApplication API adı verilen bir dizi spesifik dahili fonksiyon oluşturulur. Ancak, bu işlevlerin diğer programlar da dahil olmak üzere başka programlar oluşturmak için etkili bir şekilde kullanılabileceği sıklıkla keşfedilir. Yazarlar, ürünlerini satma stratejisine dayanarak beslenmeyi nasıl seçiyorlar: dış müşterilerin hangi sete erişmesine neden izin veriyorlar? Onaylanırsa, yazılım paketinin olumlu bir özellik olarak açıklaması şu ifadeyi içerir: "Paket kapsamlı bir dizi API işlevi içerir" (veya ek para karşılığında).

Bu nedenle, çoğunlukla API altında, bir programın parçası olan ancak diğer programlarda kullanılabilen bir dizi işlev bulunur. Örneğin Excel, son kullanıcıya yönelik arayüze ek olarak, örneğin VB kullanılarak oluşturulan programlarla erişilebilen bir dizi Excel API işlevine sahiptir.

Görünüşe göre, Windows API, işletim sisteminin bir parçası olan ve aynı zamanda VB kullanılarak yazılan program da dahil olmak üzere başka herhangi bir program tarafından erişilebilen bir dizi işlevdir. Bu plan, aslında DOS API'si olan sistem BIOS/DOS geçersiz kılma kümesine tamamen benzerdir.

Windows API işlevselliğinin avantajı bir yandan DOS'unkinden çok daha geniştir, diğer yandan eski işletim sistemindeki programların kullanabileceği bilgisayar kaynaklarının doğrudan kontrolüne yönelik pek çok özellik içermez. Ek olarak, Windows API'ye bağlantı ek prosedür parametrelerine dayanır ve DOS işlevine Interrupt adı verilen özel bir işlemci makine komutu aracılığıyla erişilir.

VB Programcıları İçin En Çok İhtiyaç Duyulan Win API

VB'nin çeşitli işlevleri olmasa da, az çok ciddi gelişme sürecinde, yeteneklerinin çoğu zaman gerekli görevleri tamamlamak için yeterli olmadığı ortaya çıkıyor. Bu durumda, yeni başlayan programcılar genellikle VB'nin eksikliklerini gözden kaçırmaya başlarlar ve bilgisayarlarının büyük bir maliyet kümesine sahip olduğundan ve bunlara hızlı bir şekilde girilmesi gerektiğinden şüphelenmeden aracı değiştirmeyi düşünürler.

Win API'sini öğrendiğinizde, belirli sistem prosedürlerine genişletilmiş olmaktan başka bir şey olmayan, ancak yalnızca bu dilin sözdizimine göre uygulanan çok sayıda kullanılmış VB işlevinin olduğu ortaya çıkar. Hızlı bir API ihtiyacına bağlı olarak mevcut seçenekler şunlardır:

  1. Genellikle VB işlevleri biçiminde uygulanan API işlevleri. Zaman daha az değildir, bu durumda API durgunluğuna geçmek gerekebilir, böylece üretkenliği hızlı bir şekilde artırmanıza olanak tanır (aktarılan parametrelerde gereksiz değişikliklerin olmaması hariç).
  2. Oluşturulan VB işlevleri yalnızca API işlevlerinin bir parçası olarak uygulanır. İşte daha basit bir seçenek. Örneğin CreateDirectory API işlevi, VB MkDir operatörüne kıyasla daha büyük yeteneklere sahiptir.
  3. VB dilinin mevcut sürümünde analogları olmayan çok sayıda API işlevi vardır. Örneğin, VB kullanarak bir dizini silmek mümkün değildir - bunun için SilDirectory işlevini kullanmanız gerekir.

Ayrıca, örneğin bellek adresleriyle çalışma yeteneğinin olmaması nedeniyle, belirli API işlevlerine (bazıları Win API'sinde bile önemsizdir) bir dizi dil arabirimi aracılığıyla VB programlarından erişilemediği unutulmamalıdır. Ancak bazı durumlarda önemsiz olmayan programlama teknikleri yardımcı olabilir (aynı adreslerin olması durumunda).

Yazarın özel fikri, sürümü VB tarafından kullanılan işlevlerin sürümüne genişletmek yerine, aşağıdakilerin en yaygın API işlevlerinin iyi bir tanımını vermesidir. Aynı zamanda, geliştiricilerin, genişletilmiş işlevlere sahip bir özellik için yeni bir sürümün ortaya çıkmasını beklememelerini, bunun yerine orijinal Win API stokunu dikkate almalarını rica ediyorum - yeteneklerinizin tamamen açık olduğu açıktır. ihtiyaç halihazırda VB 1.0 sürüm 1991 sürümünde uygulanabiliyordu.

Yak vivcchati Win API'si

Win32 API'nin işlev sayısının 10 bin civarında tahmin edildiğini (Microsoft gibi kimse kesin rakamı bilmiyor) hatırlamak o kadar da kolay değil.

VB deposu (sürüm 4-6), Win API - WIN32API.TXT açıklamasını içeren bir dosya içerir (uygulamasına ilişkin bir rapor daha sonra duyurulacaktır). Ancak, her şeyden önce, bu yardımla, aşağıdaki anımsatıcı adlar dışında bu ve diğer işlev ve parametrelere ilişkin bilgileri görüntüleyebilirsiniz ve başka bir deyişle, bu dosyanın işlevi farklı olmaktan çok uzaktır. Günümüzde (şans eseri) VB 3.0, Win16 API işlevlerini açıklayan özel kavram kanıt dosyalarına sahipti. V.4.0'da bu değerli bilgilere manuel arayüz aracılığıyla zaten ulaşılabilmektedir.

Win32 API'sine ilişkin ek bilgiler, VB 5.0, 6.0 Enterprise Edition ve Office 2000 Developer Edition ile birlikte gelen MSDN Kitaplığı CD'lerinde de bulunan önceki Platform Yazılım Geliştirme Kiti'nde bulunabilir. Ancak orada ihtiyacınız olan bilgiyi bulmak ve ona ulaşmak hiç de kolay değil. Buradaki tüm açıklamaların tamamen C.

VB ortamlarında API programlamaya dünyanın en tanıdık girişi, ünlü Amerikalı uzman Daniel Appleman'ın kitabıdır. Dan Appleman'ın Windows API Visual Basic Programcı Kılavuzu'nun bu serisi (Win16, Win32, VB'nin yüzlerce farklı sürümü için) 1993'ten bu yana sürekli olarak VB programcıları için en çok satan kitap haline geldi. 1997 yılında yayınlanan Dan Appleman'ın VB 5.0 Programmer's Guide to the Win32 API kitabı, yazara küçük bir taşra kasabasının ilk kitapçısını bilen bir arkadaşı tarafından ABD'den getirildi.

1.500'den fazla sayfadan oluşan bu kitap, VB'de API programlamaya yönelik ileri tekniklerin açıklamasını ve 900'den fazla işlevi içerir. CD, kitabın tam metnini ve tüm yazılım uygulamalarını ve ayrıca ikinci versiyonda yer almayan bazı ek bölümleri içerecektir. 1999'da Dan Appleman, diğer 7.600 işlevin (rapor panoları olmasa da) genel bakışlarını içeren Dan Appleman'ın Win32 API Puzzle Book and Tutorial for Visual Basic Programmers adlı yeni bir kitabını yayınladı.

Win API ve Dinamik Bağlantı Kitaplığı (DLL)

Dinamik DLL kitaplıkları olarak bir dizi Win API uygulaması. Daha sonra aslında Win API deposunda bulunan kitaplıkların uygulamasında VB'nin ortasına DLL yükleme teknolojisinden bahsedeceğiz. Ancak DLL'lerden bahsederken çok fazla saygı kazanmak gerekiyor.

Bu durumda, DLL altında, gerekli prosedürlere - alt programlara veya işlevlere (bir VB projesinin ortasında prosedürlere tıklandığında beklenenle yaklaşık olarak aynı) doğrudan dönüşümü sağlayan ikili dinamik kitaplıkların geleneksel sürümüne saygı gösterebiliriz. . Bu tür kitaplıklar diğer araçlar kullanılarak oluşturulabilir: VC++, Delphi, Fortran ve VB (sürüm 7.0'da ne göründüğüne bağlı olarak) - geri kalanı, erişimi OLE Otomasyonu arabirimi aracılığıyla yapılandırılan ActiveX DLL olmadan çalışabilir.

Dinamik kitaplık dosyaları extension.DLL dosyasını içerebilir, ancak durum böyle olmayabilir (Win16 için extension.EXE genellikle takılıp kalır); Harici aygıtların sürücüleri ek DRV altında listelenmiştir.

Daha önce de belirttiğimiz gibi, sistem kataloğunda saklanabilmeleri için Windows API işlevlerinin ve dosyalarının tam sayısını belirlemek önemlidir. Bu plan, işletim sisteminin çekirdeğine kadar uzanan bir kütüphane deposunu ve temel ek işlevlere sahip ana kütüphaneleri daha iyi görecektir.

Ve şimdi mutluyum.

Lütfen 1. DL duyurusunun doğru formatını takip edin L-prosedürleri

Programın DLL prosedürlerine kadar olan hiyerarşisi, "birincil" Visual Basic prosedürlerine kadar olan hiyerarşiyle aynı görünür; örneğin:

DllName'i çağırın ([bağımsız değişken listesi])

Ancak, harici DLL işlevlerini (Win API dahil) kullanmak için, program tarafından aşağıdaki gibi görünen Declare deyimi kullanılarak çağrılmaları gerekir:

Alt Prosedür Adını Bildirin Lib _ “Kütüphane Adı” _ [([Argüman Listesi])]

Fonksiyonu Bildirin Fonksiyon Adı _ Lib “Kütüphane Adı” _ [([Argüman Listesi])]

Burada kare kollarda operatörün gerekli elemanları belirtilmiş, alternatif kelimeler italik, anahtar kelimeler ise italik olarak gösterilmiştir. Gelişmiş sistem, operatör sözdiziminin iyi bir tanımını sağlayacak şekilde tasarlanmıştır; bu, bu anların daha az önemli olduğu anlamına gelir.

Harici işlevlerin çoğu modülün Genel Bildirimler bölümünde bulunur. Eğer bunu bir form modülüne yerleştirirseniz, Özel anahtar sözcüğünü belirtmeniz gerekir (bu yalnızca modülün ortasında bulunur) - bu, form modülünün tüm prosedürleri için aynıdır.

Win32 API uygulamaları kümesi işlevlerle sınırlıdır (Win16 API'nin birçok Alt programı vardı). Bu, çoğunlukla bir işlemin tamamlanma kodunu döndüren Long türündeki işlevler için özellikle doğrudur.

Declare operatörü MS Basic'te zaten DOS için göründü ve dahili prosedürleri projeye iletmek için kullanıldı. İç prosedürlerin bildirimleri Alt ve İşlev açıklamalarını otomatik olarak tanımladığından Visual Basic'in buna ihtiyacı yoktur. Basic/DOS'tan uyarlanan yeni açıklama, prosedürün bulunduğu kitaplık dosyasının adını belirtmelidir. Wip API kitaplıkları Windows sistem dizininde bulunur; tek gereken bir dosya adıdır. Bir DLL üzerinde çalışıyorsanız emin olmak için o dosyaya yeni bir yol yazmanız gerekecektir.

Declare operatörünün açıklaması çok yer kaplıyor ve kod penceresinin yanındaki tek satıra sığmıyor. Bu nedenle, program yazarken her türlü satır aktarım şemasına dikkat etmenizi öneririz, örneğin:

Fonksiyonu Bildirin GetTempPath _ Lib “kernel32” Takma Adı ​"GetTempPathA” _ (ByVal nBufferLength As Long, _ ByVal lpBuffer As String) As Long

Ve burada farklı satırların açıklamasının tüm ana unsurları açıklanmaktadır ve okunması güzeldir.

Lütfen 2. DLL işlevleriyle çalışırken özellikle saygılı olun

Win API'nin ve çeşitli DLL işlevlerinin kullanılması, VB'nin işlevsel yeteneklerini önemli ölçüde genişletir ve çoğu zaman program verimliliğini artırmanıza olanak tanır. Ancak bedelin ödenmesi gereken bedel, özellikle geliştirme sürecinde robotik programların güvenilirliğinin azalmasıdır.

VB ara yazılımının en önemli avantajlarından biri program geliştirme sürecinin güvenilirliğidir: yorumlayıcı çerçeve altında çalışan program kodunun Windows ve VB robotunu kırmak teorik olarak imkansızdır. Programcı, parametrelerin çağrılan işleve aktarılmasının doğruluğu konusunda çok dikkatli olmayabilir - bu tür hatalar, kodun çevrilmesi işlemi sırasında veya yürütülmesi sırasında yorumlayıcının kendisi tarafından kolayca tespit edilecektir. En kötü senaryoda, hem anlam hem de nerede ve ne olduğu açısından işleme rejiminde bir kesinti olacaktır.

Windows API'nin veya diğer DLL kitaplıklarının doğrudan işlevlerinin kullanılması, veri aktarımı ve VB ortası dışındaki koda birleştirme işlemi üzerindeki kontrolü ele alır. Bu nedenle, harici işlevlerdeki bir uzlaşma, hem VB'nin hem de işletim sisteminin arızalanmasına yol açabilir. Faydaların varlığı tamamen doğalsa, bu özellikle program geliştirme aşamasında önemlidir. Bu nedenle, temel sistemin geniş işlev yelpazesi nedeniyle programcı, bunların uygulanmasının doğruluğu konusunda sorumluluk alır.

Sorun, farklı programların prosedürler arasında parametreleri aktarmanın farklı yollarına sahip olması nedeniyle daha da karmaşık hale gelmektedir. (Daha doğrusu, çoğumuz birkaç yöntemi destekleyebildiğimiz için farklı iletim yöntemleri tartışmaya tabidir.) Win API, C/C++'da uygulanır ve bu sistemde kabul edilen geçiş parametreleri hakkında konuşmamız gerekir. standart VB seçeneğinden.

Bununla bağlantılı olarak, API işlevlerinin VB analoglarının ortaya çıkmasının, geri kalanların VB sözdizimine uyarlanması ve veri alışverişini kontrol etmek için benzer bir mekanizmanın uygulanmasıyla doğrulandığı belirtilmelidir. Ayrıca derlenmiş bir modül oluştururken programların son geliştirme aşamasında Yerel Kod (makine kodu) yerine P kodu derleme seçeneğini seçmenin daha iyi olacağını da takdir ediyoruz. İlk başta program, makine kodunu kullanmak yerine, tercihen işletim sistemine bakarak ve olası hataları tanımlamak için manuel bir mod sağlayarak bir tercümanın kontrolü altında çalışır.

Porada 3. VB'de güvenilir API programlama için Dan Appleman'dan on öneri

API'nin çeşitli işlevleri, prosedürlerin ölçeğini büyütmek için o kadar da basit olmayan bazı yöntemlerin (VB'ye karşı) kullanılmasıyla daha dikkatli programlama gerektirir. Yavaş yavaş kendimizi bu yiyeceklerden mahrum bırakıyoruz. Şimdi Dan Appleman'ın bu konuyla ilgili tartışmalarının bir özetini (ilk versiyonu 1993'te ortaya çıktı) bazı ek yorumlarımızla birlikte sunacağız.

1. ByVal'ı hatırlayın. Bir API ve DLL, işlevlerden önce uygulandığında ortaya çıkan en yaygın sorun, ByVal anahtar sözcüğünün yanlış sözlüğünde yatmaktadır: ya onu koymayı unuturlar ya da sonunda, buna gerek olmadığında koyarlar.

Bu örnekler ByVal operatörünün parametreleri aktarmak için girişini gösterir

Parametre türü Z ByVal ByVal olmadan
Tamsayı Yığın 16 bit kapasiteye sahiptir Yığın, 16 bitlik bir tam sayının 32 bitlik adreslerini barındırabilir
Uzun Yığın 32 bit kapasiteye sahiptir Yığın, 32 bitlik bir tam sayının 32 bitlik adreslerini barındırabilir
Sicim Dizi, C'de kullanılan formata dönüştürülür (sondaki boş bayt dikkate alındığında). Yeni satırın 32 bitlik adresleri yığına yerleştirilir Yığın, satırın VB tanımlayıcısını içerir. (Bu tür tanımlayıcılar hiçbir zaman Windows API tarafından tanınmaz ve yalnızca VB için özel olarak uygulanan DLL'lerde tanınır.)

Burada, VB de dahil olmak üzere herhangi bir programlama sistemindeki parametrelerin aktarımının iki ana adımla belirlendiğini belirtmekte fayda var: gönderme (ByRef) veya değer (ByVal). İlk seçenek değişimin adresini alır (bu seçenek VB'de değişim için kullanılır), diğeri ise değerini alır. Geçerlilik ilkesi, ek bir mesajdan sonra çağıran programın aktarılan parametrenin değiştirilen değerine geri dönmesinin sağlanması gerçeğinde yatmaktadır.

Başlamak için aşağıdaki programları kullanarak bir deney yapın:

Dim v As Integer v = 2 MyProc(v) MsgBox'ı çağırın “v = “ & v Sub MyProc (v As Integer) v = v + 1 End Sub

Bu uygulamayı çalıştırdığınızda değişkenin 3'e eşit değerleri hakkında bilgi göreceksiniz. Sağda bu durumda tıklayan program tarafından fiziksel olarak oluşturulan v değişkeninin adresleri MyProc alt programına aktarılır. . Şimdi prosedür açıklamasını şu şekilde değiştirin:

Alt MyProc (ByVal ve Tamsayı Olarak)

Sonuç olarak, testi çalıştırdığınızda v = 2'yi kaldırırsınız; bu, değişkenin çıkış değerinin prosedüre iletildiği anlamına gelir; üzerinde çalışan işlemlerin sonucu, çağıran programa döndürülmez. Değer iletim modu ayrıca Çağrı operatörü yardımıyla aşağıdaki şekilde değiştirilebilir:

Sub MyProc (v As Integer) ... Call MyProc ((v)) '(v) - kollar, değerlerin arkasındaki iletim modunu _ gösterir.

Ancak, dahili VB prosedürlerine genişlerken, Call deyiminde ByVal anahtar sözcüğünün kullanımı bastırılır; bunun yerine yuvarlak kollar engellenir. İşte bir açıklama.

Klasik versiyonda (C, Fortran, Pascal), ByRef ve ByVal modlarının önemi, veri değişim yığınına neyin yerleştirildiğine (değişim adresleri veya değerleri) bağlıdır. Temelde, yazılım emülasyonunun ByVal sürümü tarihsel olarak kullanılmıştır - zaman değişikliğinin oluşturulduğu değerlerin iletilmesi dışında yığın her zaman adresleri içerir. İki seçeneği (Klasik ve Temel) birbirinden ayırmak için ByVal modunu tanımlamanın farklı yolları vardır. VB'de ByVal modunun emülasyonunun programların daha fazla güvenilirliğini sağlaması önemlidir: dönüştürme biçimini karıştıran program, tıklanan programın değerini düzelterek döndürülmekten (veya döndürülmemekten) mahrum kalma riskiyle karşı karşıya kalır. değiştirmek. "Klasik" versiyonda, bu tür bir karışıklık, sonlandırma prosedürünün yapıldığı saat içinde ölümcül bir ölüme yol açabilir (örneğin, vikoristin hafıza adresi yerine sıfıra eşit, değiştirilebilir değerler varsa) ).

DLL işlevleri "klasik" prensiplere göre uygulanır ve bu nedenle her argümanla veri alışverişinin nasıl yapıldığına dair net bir açıklama gerektirir. Bunun kendisi, Declare açıklaması (daha kesin olarak iletilen argümanların listesi) aracılığıyla bir bildirim işlevi olarak hizmet edebilir. Çoğu zaman, parametrelerin bir Windows API işlevine veya DLL'ye aktarılması ByVal anahtar sözcüğü kullanılarak belirtilir. Ayrıca, Declare operatöründe veya doğrudan işlev çağrılırken belirtilebilir.

Yanlış parametre aktarımının mirasının aktarılması kolaydır. Açıkça geçersiz bir adres seçerseniz bir GPF (Genel Koruma Arızası) bildirimi görürsünüz. İşlev geçerli bir adresten kaçan değerleri aldığından, API işlevi yabancı bir alana (örneğin, Windows çekirdeğine) girerek her türlü felaketle sonuçlanan sonuçlara neden olur.

2. Aktarılan parametrelerin türünü değiştirin. Aktarılan parametrelerin doğru sayısı ve türü de aynı derecede önemlidir. Declare'de bildirilen argümanların API fonksiyonunun parametrelerine karşılık gelmesi gerekir. Parametrelerin aktarılmasıyla ilgili en büyük sorun, NULL ile bir sıfır satırı arasındaki farkla (bir ve aynı olan bellek izi) ilgilidir.

3. Döndürülmekte olan değerin türünü kontrol edin.

VB, işlev tarafından döndürülen değer türlerinin çeşitliliğini ayarlama konusunda toleranslıdır ve bazı sayısal değerler yığın aracılığıyla değil, kayıtlar aracılığıyla döndürülür. Aşağıdaki kurallar, API işlevi tarafından döndürülen doğru değerleri belirlemenize yardımcı olacaktır:

  • Değerleri döndürmeyen bir DLL işlevi ('C'deki void işlevine benzer), VB Sub gibi basitleştirilebilir.
  • Bir değeri (Tamsayı veya Uzun) döndüren bir API işlevi, Sub veya belirli bir türdeki değerleri döndüren bir İşlev olarak belirlenebilir.
  • Bu API işlevi kayan noktalı sayıları döndürmez, ancak DLL'ler bu tür verileri döndürebilir.

4. As Any yapısını büyük bir dikkatle kullanın. Birçok Windows API işlevi, farklı türdeki parametreleri kabul etme ve bunları As Any yapısına dayalı olarak kullanma yeteneğine sahiptir (türün yorumlanması, iletilen diğer parametrelerin anlamına bağlıdır).

İyi çözümler, aynı işlevleri paylaşan iki veya daha fazlası arasında birden fazla takma ad (Takma ad) işlevine sahip olabilir ve şarkı söyleme türünün her açıklamasında parametreler belirtilir.

5. Satırları başlatmayı unutmayın. Win API'nin, parametre olarak iletilen satır arabelleklerinden veri toplayarak bilgileri döndüren basit bir işlevi vardır. Programınızda her şeyi doğru yapabilirsiniz: ByVal'i unutmayın, parametreleri fonksiyona doğru şekilde iletin. Ancak Windows, görülen depolama alanının boyutunun bu kadar büyük olduğuna inanamıyor. Satırın boyutu, içine yerleştirilebilecek tüm verileri barındırmaya yeterli olmalıdır. Gerekli boyutta bir arabellek ayırma sorumluluğu VB programcısına aittir.

Lütfen, 32 bit Windows'ta, farklı satırlarla, ulusal sistem ayarlarına bağlı olarak Unicode'dan (çift bayt kodlama) ANSI'ye (tek bayt kodlama) ve geriye dönüştürmenin mümkün olduğunu unutmayın. Bu nedenle, arabellekleri ayırmak için normal diziler yerine bayt dizilerini kullanmak genellikle daha güvenlidir. (Bu konuyla ilgili bir rapor aşağıda ele alınacaktır.)

Çoğu Win API işlevi, maksimum blok boyutunu kendiniz ayarlamanıza olanak tanır. Örneğin bloğun boyutunu belirtmek için başka bir API fonksiyonunu çağırmanız gerekir. Örneğin GetWindowTextLength, GetWindowText işlevinin içerdiği pencerenin başlığını yerleştirmek için gereken satırın boyutunu belirlemenize olanak tanır. Bu nedenle Windows, sınırın ötesine geçmeyeceğinizi garanti eder.

6. Vikorize Seçeneği Her iki dilde de açık.

7. Parametrelerin değerlerini ve döndürülen değerleri dikkatlice kontrol edin. VB türleri doğrulama potansiyeline sahiptir. Bu, eğer bir VB fonksiyonuna yanlış bir parametre aktarmaya çalışırsanız, olabilecek en kötü şeyin VB'den gelen hata mesajını reddetmeniz olduğu anlamına gelir. Ne yazık ki, bu mekanizma Windows API işlevine yükseltildiğinde çalışmaz.

Windows 9x, çoğu API işlevinin parametrelerini kontrol etmek için gelişmiş bir sisteme sahiptir. Dolayısıyla bu verilerde af bulunması, ölümcül bir tazminat anlamına gelmese de buna neyin sebep olduğunu tespit etmek o kadar da kolay değil.

Burada bu tür sütü iyileştirmenin çeşitli yollarını bulabilirsiniz:

  • API işlevinin dış görünüm yanıtını kontrol etmek için dış görünüm modunu veya Debug.Print'i kontrol edin. Her şeyin normal sınırlar içinde olduğundan ve işlevin doğru şekilde tamamlandığından emin olmak için bu tıklamaların sonuçlarını inceleyin;
  • Vikorist, CodeView türünün Windows geliştiricisi ve Windows'un özelleştirilmiş sürümü (Windows SDK'dan). Bu işlevler parametrelerdeki değişiklikleri algılayabilir ve en önemlisi hangi API işlevinin değiştirileceğini belirleyebilir;
  • Parametre türlerini ve değerlerinin kabul edilebilirliğini doğrulamak için üçüncü taraf şirketlerin ek özelliklerini kontrol edin. Bu tür yöntemler yalnızca parametre değişikliklerini bulmakla kalmaz, aynı zamanda VB koduna değişikliğin nerede yapıldığını da söyler.

Ayrıca API fonksiyonunun sonucunu dikkatlice kontrol etmek gerekir.

8. VB ve Windows'taki sayıların aynı olmadığını unutmayın.Öncelikle VB'de “Tamsayı” teriminin 16 bitlik bir sayı anlamına geldiğini, Win 32 belgelerinde ise 32 bitlik bir sayı anlamına geldiğini hatırlayalım. Başka bir şekilde, VB'deki tamsayı sayılar (Tamsayı ve Uzun) işaretsiz değerler değildir (bir basamak işaret olarak, diğeri bir sayının mantis olarak kullanılır), Windows'ta - bilinmeyen sayılar bile kullanılır. Ek aritmetik işlemler kullanarak bir parametre oluşturursanız (örneğin, bir taban ve ofsetin ek ikamesi kullanılarak bir adresin hesaplanması) bu durumun dikkate alınması gerekir. Hangi standart VB aritmetik fonksiyonları uygun değildir. Bu durumdan neden korkuyorsunuz, gelin bunu konuşalım.

9. İşlev adlarına dikkat edin. Win16'da, tüm Win32 API işlevlerinin adları, küçük ve büyük harflerin tam değişimine duyarlıdır (Win16'da bu yoktu). Büyük bir yazıcının yerine küçük bir yazıcı koyarsanız gerekli işlev bulunamayacaktır. Ayrıca satır parametrelerini ayarlamak için işlevlerde doğru A veya W sonekine dikkat edin. (Bununla ilgili rapor – aşağıdaki bölüm.)

10. Çalışmanızın sonuçlarını mümkün olduğunca sık kaydedin. Yanlış DLL ve Win API komut dosyalarıyla ilişkili hatalar, VB ara yazılımının ve muhtemelen tüm işletim sisteminin çökmesine neden olabilir. Lütfen test çalıştırmasından önce kodunuzun kaydedildiğinden emin olun. En basit şey, VB ortamında projeye başlamadan önce modüllerin projeye otomatik olarak yazılması modunu ayarlamaktır.

Bir öncekini okuduktan sonra Win API fonksiyonunun sağdan kaldırılmış olması dikkatinizi çekebilir. Bu arada, bu doğrudur, ancak yalnızca VB'nin sağladığı güvenli programlamaya uygun olarak. Ancak hafif durgunluk ve bilinen olası tehlikeler durumunda bu risk minimum düzeydedir. Ek olarak, Win API'sinin durgunluğuyla baş etmek çoğu zaman imkansızdır - ciddi bir gelişme durumunda buna yine de ihtiyaç duyulacaktır.

Bundan önce, geniş bir DLL sınıfı için "su altı" taşlarını daha önce düşünmüştük. Win API ile her şey çok daha basittir çünkü bu işlevlerin uygulanma biçimi açıkça birleştirilmiştir. Anneye saygıda dikkat edilmesi gereken başlıca noktalar şunlardır:

  1. Win32 API'nin işlevleri, İşlev türünün işlevleri veya prosedürleridir (Win16 API'nin birçok Alt programı vardı). Tüm işlevler Long tipindedir, bu nedenle açıklamaları şu biçimde yazılır: İşlev adını Bildir ... As Long 'işlev türü _ açık biçimde belirtilir

    Bildir İşlev adı& 'işlev türü _ ek sonekle gösterilir

    API işlevine dönüşüm şu şekilde görünür:

Sonuç& = ApiAdı& ([ Argümanların Listesi]
  1. Döndürülen en önemli fonksiyon işlem tamamlama kodudur. Ayrıca, sıfır olmayan bir değer normal tamamlanma anlamına gelirken, sıfır değer yürütme anlamına gelir. Bir kez daha (veya daha önce değil), GetLastError işlevini kullanarak değişikliğin niteliğini netleştirebilirsiniz. Bu fonksiyonun açıklaması şuna benzer: Declare Function GetLastError& Lib “kernel32” ()

    UVAGA! VB'nin ortasında çalışırken, rafine edilmiş kodun değerini kaldırmak için LastDLLError Err nesnesini kullanmak daha iyidir, çünkü VB, API güncellemeleri ile programların sürekli yürütülmesi arasında GetLastError işlevini de sıfırlar.

    GelLastError'ı oluşturan kodu, API32.TXT dosyasında yazılan ve ERROR_ sonekiyle başlayan adlara sahip ek sabitleri kullanarak yorumlayabilirsiniz.

    En yaygın saldırı türleri aşağıdaki kodlardır:

    • ERROR_INVALID_HANDLE = 6& - yanlış tanıtıcı
    • ERROR_CALL_NOT_IMPLEMENTED = 120& - yalnızca Windows NT için kullanılabilen Windows 9x işlevleri çağrısı
    • ERROR_INVALID_PARAMETER = 87& - hatalı parametre değeri

    Bununla birlikte, belirli bir parametrenin değerlerini döndürmek için pek çok işlev vardır (örneğin, OpenFile, bir dosya açıklamasının değerlerini döndürür). Bu durumda değer, çoğunlukla 0 -1 olmak üzere diğer bazı özel Return& değerlerine atanır.

  2. Win32 API, en basit veri türlerini aktarmak için kesinlikle sabit yöntemlere sahiptir. a) ByVal...As Long

    Bağımsız değişken aktarmanın en az %80'i Long türüyle yapılır. Argümanı gözden geçirin Öncelikle ByVal anahtar sözcüğü eşlik eder ve bu, diğer şeylerin yanı sıra, VB programlarından bir API işlevine kadar tek yönlü veri aktarımının bağlantılı olduğu anlamına gelir.

    B) ByVal...As String

    Bu tür aktarım aynı zamanda sıklıkla ve aynı argümanla ortaya çıkma eğilimindedir. Öncelikle ByVal sıkışıp kalıyor. Bir API işlevi çağrıldığında, yığına satır adresleri yazılarak iki yönlü veri alışverişine olanak sağlanır. Sıra halinde çalışırken bazı sorunlara dikkat etmek gerekir.

    İlk olarak, satırlar için bellek rezervasyonu, çağıran program tarafından gerçekleştirilir, dolayısıyla API işlevi satırları saklayacaksa, onu çağırmadan önce gerekli boyutta bir satır oluşturmak gerekir. Örneğin GetWindowsDirectory işlevi, 144 karakterden fazla yer kaplaması gerekmeyen Windows dizininin yolunu döndürür. Açıkçası, bu işlevin uygulanması şuna benzer:

    WinPath$ = Space$(144) ' _ 144 karakterlik satır ayır Result& = GetWindowsDirectory& (WinTath$, 144) _ ' arabellek doldurma ' Result& - _ dizin adındaki gerçek karakter sayısı WinPath$ = Left$(WinPath, Result&)

    Başka bir sorun, bir API işlevi bir API işlevine dönüştürüldüğünde, çıktı satırının dahili ekranında ve işlevden çıkarken aynı şekilde yeniden oluşturulması gerçeğinde yatmaktadır. Tıpkı Win16'nın ilk günlerinde olduğu gibi, bu işlem yalnızca sıfır baytın, örneğin bir satırın eklenmesini gerektiriyordu, daha sonra Win32'nin gelişiyle, Unicode'un çift bayt kodlamasının ANSI'ye dönüştürülmesi sağlandı ve bu böyle devam etti. . (Bu, Computer Press 10'99 ve 01'2000 tarihli “VB'de satır değişikliği olan robotların özellikleri” başlıklı makalede rapor edilmiştir). Sadece ByVal'in yardımıyla... String yapısı olarak sembolik veri satırlarının değişiminin mümkün olması önemlidir.

    B) ...Herkes Gibi

    Bu, bellek arabelleği adresinin değerinin yığına yerleştirileceği anlamına gelir; örneğin API işlevinin ne işleyeceği yerine yorum, diğer argümanların anlamından bağımsızdır. Ancak As Any yalnızca Declare operatöründe kullanılabilir; belirli bir işlev uygulandığında bağımsız değişkene belirli bir değer atanabilir.

    D) ... UserDefinedType olarak

    Böyle bir yapı, başka bir yapı uğruna veri alışverişi (suçlu tarafın vaadi) gerektiğinde de sıklıkla takılıp kalır. Aslında bu tasarım, As Any iletim formunun basit bir spesifik uygulamasıdır, sadece her fonksiyonun sabit bir yapısı vardır.

    Veri yapısının biçimi belirli bir API işlevi tarafından belirlenir ve bunların doğru şekilde tanımlanması ve aynı programda rezerve edilmesi programın sorumluluğundadır. Bu tasarım Öncelikle vikorist olmadan ByVal kelimeleri, ardından gönderdikten sonra aktarım bu kutuya eklenir - değişim adresi yığına yazılır.

API işlevine ayak uydurun

Bu, dosyalarla çalışmanın iki temel işlevi örneği kullanılarak gösterilmektedir: lopen ve lread, bunlar aşağıda açıklanmıştır:

Bildir İşlevi lopen Lib "kernel32" _ Alias ​​​​"_lopen" (_ ByVal lpFileName As String, _ ByVal wReadWrite As Long) As Long Bildir İşlev lread Lib "kernel32" _ Alias ​​​​"_lread" (_ ByVal hFile As Long, lpBuff _ ByVal wBytes As Long) As Long

VB'de bunların analogları - bazen daha kesin - Open ve Get operatörleridir (İkili mod için). Boş fonksiyonda Alias ​​​​anahtar kelimesinin kullanılmasından çok etkilendik - eğer onsuz yapamıyorsanız, bu da aynı problemdir. Kitaplıktaki bu işlev adları, VB tarafından izin verilmeyen bir sandalye altı sembolüyle başlar (C filmi için tipik stil).

Bir dosyayı açma işlemi şu şekilde görünebilir:

Const INVALID_HANDLE_VALUE = -1 ' geçersiz _ değer açıklaması lpFileName$ = “D:\calc.bas” ' dosya adı wReadWrite& = 2 ' okuma-yazma modu hFile& = lopen(lpFileName$, wReadWrite&) _ ' valued = INVALID_HANDLE_ VALUE Sonra _ ' dosyayı düzeltin ' düzeltme kodunu belirtin CodeError& = Err.LastDllError 'CodeError& = GetLastError _ ' bu yapı çalışmıyor End If

Burada iki noktayı vurgulamamız gerekiyor:

  • Fonksiyonun değeri olarak dosya açıklamasının değerini belirliyoruz. Değer, -1 değerini doğrular;
  • Bu durumda GetLastError işlevine gitmeye gerek yoktur - hatanın belirtilen değerini almak için Err nesnesine gittik (böyle bir durumun olasılığı hakkında daha fazla konuştuk).

Daha sonra dosya yerine okuyabilirsiniz, ancak bu aynı zamanda programın yapısını tanımaktan sorumlu olduğunu da belirtir (birden fazla çift dosyayla çalışırken olduğu gibi). Bu durumda lread fonksiyonunun açıklaması şu şekilde görünebilir:

Dim MyVar As Single wBytes = lread (hFile&, MyVar, Len(MyVar) ' konuşma sayısının okunması, 4 bayt ' wBytes - gerçekte okunan veri sayısı, '-1 - parite... Type MyStruct x As Single i As Integer Bitiş Türü Dim MyVar As MyStruct wBytes = lread (hFile&, MyVar, Len(MyVar)) ' okuma veri yapısı, 6 bayt

Bir kez daha saygı gösterin: işlevin diğer argümanı göndericilere ve değerlere geri dönüşe iletilir.

Dim MyVar As String MyVar = Space$(10) ' 10 karakter için yer ayır wBytes = lread (hFile&, ByVal MyVar, Len(MyVar)) ' okuma karakter dizisi, 10 karakter

Burada daha önce tanıtılan poponun önemini görebilirsiniz - satır değişikliğine mutlaka ByVal anahtar kelimesi eşlik eder.

Bir dizideki dosya yerine okuma (basitlik açısından tek baytlık bir dizi kullanacağız) şu şekilde derlenir:

Dim MyArray(1 To 10) As Byte wBytes = lread (hFile&, MyArray(1), _ Len(MyArray(1))* 10) ‘ diziden 10 öğe oku

Dizinin ilk elemanını argüman olarak belirterek, dizi için ayrılan hafıza alanının başının adresini iletiyoruz. Açıkçası, bu yöntemi kullanarak bir dizinin herhangi bir parçasını saklayabilirsiniz:

WBytes = lread (hFile&, MyArray(4), _ Len(MyArray(1))* 5) 4'üncüden 8'e kadar dizi öğelerini okuma

Porada 5. Transfer için Vickory Takma Adı Ayarlar Herhangi Bir Şekilde

Burada ön popoyu temel alarak Dan Appleman adına dördüncünün özünü ortaya çıkarıyoruz.

Lread işleviyle çalışırken, kendisinden önce sıradan bir değişken çalıştırırken ByVal anahtar sözcüğünün kullanılması gerektiğini unutmamak önemlidir (aksi takdirde yasa dışı işlemle ilgili bilgiler kaybolmaz). Güvenli tarafta olmak için, yalnızca yaygın değişikliklerle çalışmak üzere bu işlevin ek özel bir açıklamasını oluşturabilirsiniz:

Fonksiyonu Bildirin lreadString Lib “kernel32” _ Alias​​“_lread” (_ ByVal hFile As Long, ByVal lpBuffer As String, _ ByVal wBytes As Long) As Long

Bu açıklamayla çalışırken artık yazdırırken ByVal'ı belirtmenize gerek yoktur:

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

Görünüşe göre Declare operatörünün sözdizimi bir dizi için böyle özel bir açıklama oluşturmanıza izin veriyor:

Fonksiyonu Bildirin lreadString Lib “kernel32” Takma adı “_lread” (_ ByVal hFile As Long, lpBuffer() As Byte, _ ByVal wBytes As Long) As Long

Koruma hayvanı

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

kaçınılmaz olarak programın ölümcül bir şekilde yürütülmesine yol açar.

Bu, Visual Basic satır değişikliklerinin işlenmesinin özellikleri hakkındaki tartışmanın devamıdır: VB, çift baytlı Unicode kodlamayı, Win API - tek baytlı ANSI'yi (ve C'de kabul edilen, sonunda sıfır baytlı bir formatla) kullanır. Bağımsız değişken olarak satır değişikliklerini değiştirirken, bir API işlevini (daha doğrusu bir DLL işlevini) çağırdığınızda Unicode'dan ANSI'ye dönüştürmenin otomatik olarak gerçekleştirildiği ve dönüşümün döndürüldüğünde gerçekleştirildiği açıktır.

Buradaki sonuç basittir: Değişken String'lerin yardımıyla sembolik verileri paylaşabilirsiniz, ancak bunlar yeterince çifte bilgi alışverişi yapmak için kullanılamaz (VB'nin 16 bit sürümleriyle çalışırken olduğu gibi). Tek boyutlu bir bayt dizisi kullanmak daha iyidir.

Görünüşe göre String türü yapının yapısını tanımlamak için kullanılabilir. Bu hafıza ile bağlantı aşağıdaki gibidir:

  • Win API'sinin geliştirilmesi için aşağıdaki yapıyı kullanmak kategorik olarak mümkün değildir: Type MyStruct x As Single s As String

    Geçiş sırasına göre satır tanımlayıcı, programın görünümündeki tüm miraslarla birlikte iletilir.

  • Bir sıra sabit ikiye katlamanın yapı elemanı olarak mümkündür: Type MyStruct x As Single s As String*8 ‘ satır sabit ikiye katlama End Type

Bu durumda kodu yeniden oluşturduğunuzdan emin olun.

Ve saygı devam ediyor: Aynı anda bir API işlevine yükseltildiğinde bir dizi satır değişikliğini (hem sabit hem de değiştirilebilir) birleştirmek mümkün değildir. Aksi takdirde “yasadışı bir işlemin” ortaya çıkması garanti altına alınacaktır.

Kütüphanenize bir DLL fonksiyonu yazmanız gerekiyorsa kötü bir durumda olduğunuz oldukça açıktır. Bir programı uygulamak için iki veya daha fazla programın birleşimi olan karma programlama teknolojisini kullanırsanız, ihtiyaç kaçınılmaz olarak ortaya çıkacaktır.

Kapsamlı bir rapor elde etmek için karma programlamanın uygulamanın temel amacı olması nedeniyle önemlidir. Gerçekten de, dil dilinin (daha doğrusu dile dayalı programlama sisteminin) güçlü ve zayıf yönleri vardır, bu nedenle çeşitli görevleri gerçekleştirmek için çeşitli araçların avantajlarını kullanmak tamamen mantıklıdır. Örneğin, VB - bir bilgisayar arayüzü oluşturmak için, C - sistem kaynaklarına etkili erişim için, Fortran - sayısal algoritmaların uygulanması için.

Yazarın fikri şu: programlamaya ciddi katılım, geliştirici tarafından iki araç kullanılarak vurgulanıyor. Açıkçası, modern zihinlerde iki sistemde bağımsız uzman olmak çok zordur, bu da "ana ve ek dil" şemasını daha mantıklı hale getirir. Buradaki fikir, "ek" dil bilgisini (bir dizi basit prosedürle yazılmış) getirmenin "ana" dilin etkililiğini önemli ölçüde artırabileceğidir. Ek bir fayda olarak VB bilgisinin artık profesyonel bir programcı için pratik bir gereklilik olması önemlidir. Konuşmadan önce, herhangi bir programcı için sadece birkaç saatlik DOS'ta Basic'e bakalım, Assembler'ın temellerini bilmek son derece önemli olacaktır.

Yani durum farklı, ancak grup robotlarının kafasında, cilt programcısı kendi özel çalışmasıyla meşgul olduğunda, prosedürel arayüzün özelliklerine ilişkin farklı dillerdeki ifadeler, projedeki tüm katılımcıların hatasıdır. Arayüze ek olarak, diğer yöntemleri ayarlamanıza izin veren, programlama yöntemlerini prosedürlere genişleten, arayüzü uyarlamanıza olanak tanıyan, anlayışa bağlı olan birçok programlama sisteminin (VB dahil) olduğunu biliyorum. Diğer diller.

Prosedürler arası arayüzü kullanırken aşağıdaki olası tehlikelere dikkat edin:

  • Tanımlayıcı yazma kuralları konusunda farklı diller ilginizi çekebilir. Örneğin VB'de gizlenen prosedürün adının takma adı sıklıkla kullanılır. Bu sorun Declare operatöründe Alias ​​​​anahtar kelimesinin kullanılmasıyla kolayca açıklanabilir (2.3 için mükemmel bir örnek).
  • Yığına iletilen yazma argümanlarının sırasını belirleyebilirsiniz. Örneğin, DOS saatlerinde (dürüst olmak gerekirse, Windows'un ortasında nasıl göründüğünü bilmiyorum), listenin sonundaki argümanları, diğer dilleri (Fortran, Pascal, Basic) - başlangıç.
  • Talimatlar veya anlamlar için parametrelerin aktarılmasına ilişkin çeşitli ilkeler açıklanmaktadır.
  • Rütbeyi ve sırayı korumanın katı ilkeleri. Örneğin, C'de (Fortran ve Pascal'da olduğu gibi), bir satırın sonu, sonundaki sıfır baytla gösterilir ve Basic'te sonu, satır tanımlayıcısında açıkça yazılır. Açıkçası, sembollerin farklı kodlarını değiştirme yeteneğini hatırlamak gerekir.
  • Zengin dünya dizilerini aktarırken, zengin dünya yapılarını tek dünyada dönüştürmek için farklı seçeneklerin olduğunu unutmayın (ilk dizinden veya sonuncusundan başlayarak, yüz iki boyutlu diziden - "satırlar halinde" veya "satırlar halinde" civcivler").

Buna dayanarak aşağıdaki öneriler formüle edilebilir:

  • Bağımsız değişkenlerin bir DLL işlevine aktarılma biçimini gözden geçirerek en basit şeylere göz atın. Win API için benimsenen standartlar tamamen tutarlıdır.
  • Her zaman kitlesel sıradan askerleri transfer etmeyin.
  • Basit sıradan ve zengin dizilerin aktarımını saygılarımla vikorist.
  • Argümanları çağrılan ve geri gönderilen prosedüre iletme mekanizmasının işlevselliğini dikkatlice kontrol ettiğinizden emin olun. Verileri doğrulamak için özel bir test yazın. Cilt argümanının aktarımının doğruluğunu dikkatlice kontrol edin. Örneğin, çok sayıda bağımsız değişken içeren bir prosedürünüz varsa, önce tek bağımsız değişkenli seçenek için dış görünüm parametresini geçirmenin doğruluğunu, ardından da tüm liste için kontrol edin.

DLL işlevi zaten örneğin Fortran'da yazılmışsa ancak giriş arayüzü yeni VB standardına pek uymuyorsa ne olur? Burada iki tarih verebilirsiniz. İlk olarak: bir test DLL işlevi yazın ve bunun yardımıyla, VB programları için gerekli işlevselliği seçmek üzere deneme yanılma yöntemini kullanmayı deneyin. Bir diğeri: Fortran'da, bir depodaki basit veri yapılarının dönüştürülmesiyle (örneğin, bir satır dizisinden büyük bir bayt dizisinin dönüştürülmesi) VB ile bir DLL işlevi arasında basit bir arayüz sağlayacak bir bağdaştırıcı prosedürü yazın.

Otzhe: vykorist DLL işlevleri. Ayrıca tatlılığı da koruyun.

BilgisayarPress 9"2000

API ile çalışırken aynı anda hem neşeyi hem de hayal kırıklığını hissedebilirsiniz. Bir yandan, diğer programlarla etkileşim kurarak izleyiciyi elde tutma oranını ve programınızın "şaşırtıcı etkisini" büyük ölçüde artırabilirsiniz. Bunun dışında, tonlarca belgenin okunması, kimlik doğrulama stratejilerinin öğrenilmesi ve amortismanlarla ilgili bilgilendirici olmayan (veya rastgele) bildirimlerin elenmesi de buna dahildir.

Öncelikle API'nin (Uygulama Programlama Arayüzü) ne olduğunu hala tam olarak anlamadıysanız, Skillcrush'taki açıklamayı ve ardından bu makalenin ilk bölümünü okuyun ki mutlaka kullanılmalıdır.

"API" inanılmaz derecede harika bir kavramdır; özellikle eklentiniz başka bir eklentiyle birlikte paketlenmişse, ona o API aracılığıyla erişilemez. Kendi programınızın ortasındaki bileşenler yani Rails'in farklı bölümleri de API aracılığıyla birbirine bağlanır. Ayrıca cildin belirli güç görevlerini yerine getirmesi için gerekli verileri ileten daha küçük bağımsız astlardır. Bu dünyadaki her şey bir API'dir!

Daha dinamik ön uç işlevselliğine sahip programlar (tek taraflı Javascript eklentileri veya yan yana AJAX çağrıları olan basit programlar) oluşturursanız, bunlar güçlü API'niz aracılığıyla Rails arka ucuna bağlanacaktır; iki veya üç satırlık kod, denetleyicilerinize HTML yerine JSON veya XML kullanmalarını ne söylemelisiniz?

Bu derste kendi güçlü API'nizi nasıl oluşturacağınızı öğreneceksiniz. Gelecek derslerde diğer programların API'leriyle nasıl etkileşim kuracağımızı vurgulayacağız. Dersler bunların değerini öğrenmek için iyi bir sıçrama tahtası olabilir, ancak bunların tüm sonuçları tamamen kapsaması pek mümkün değildir. API ile yapılan çalışmaların çoğu, belgelerini okumak ve ne istediklerini anlamak anlamına gelir.

Düşünülecek noktalar

Bilgilere bakın ve bunların cevaplarını bilip bilmediğinizi görün. Zaferden sonra tekrar kendinize dönün.

  • Rails'in anladığı gibi, bir HTTP isteğini zorladığınızda ne tür bir dosya göreceksiniz.
  • #respond_to yöntemi neden metadır?
  • Bu nesneye dahil etmek istemediğim nitelikleri belirtirken kullanıcı nesnesini (Kullanıcı) nasıl döndürürüm (böylece yalnızca User.first'i döndüremezsiniz)?
  • #to_json yöntemine eklenecek 2 kısayolu adlandırın.
  • Denetleyiciye değişiklikle ilgili bildirimde bulunmasının gerekli olduğunu nasıl söyleyebilirim?
  • Değişiklikleri yetkililere nasıl bildirebilirim?
  • API'nize programlı bağlantılara izin vermek istiyorsanız neden oturum tabanlı denetleyici kimlik doğrulama yöntemlerini kullanamıyorsunuz?
  • “Hizmet odaklı mimari” nedir?

API Temelleri

Rails eklentiniz aslında bir API'dir, ancak bunu bir API olarak düşünmeyebilirsiniz. İstemcinizin çalıştırdığı web tarayıcısı da bir programdır, dolayısıyla istemci yeni bir sayfa açtığında aslında Rails eklentinize bir API isteği gönderir. HTML masaüstü şablonlarının oluşturulmasının daha kapsamlı olması nedeniyle böyle düşündük, dolayısıyla bu işlevselliği standart bir bağlantı türü olarak sunucu programlarımıza yerleştirdik ve geri kalan her şey önemlidir.

Ancak çoğu zaman tarayıcı kullanmanın getirdiği baş ağrısıyla uğraşmadan para kazanmak istersiniz. Sayfa yapısıyla (HTML) ilgilenmiyor olabilirsiniz, ancak yalnızca saf verileri çıkarmak istiyorsunuz. Tüm başarılı müşterilerin listesini kaldırmak istediğinizi varsayalım. http://yourapplication.com/users adresini ziyaret edip #index eylemini çalıştırabilir ve tüm uygulamalarınızın bir listesini oluşturabilirsiniz.

Tek istediğin müşteri listesini iptal etmek olduğu için neden bu kadar bilgiyle uğraşasın ki? En basit seçenek, isteği JSON veya XML içerik türünü belirterek aynı URL'ye göndermek olacaktır. Rails denetleyicinizi doğru bir şekilde kurduğunuzda, tüm kullanıcılarınızı barındıracak basit bir JSON dizi nesnesine sahip olursunuz. Müthiş!

Harici bir API kullanırsanız aynı prensip aynı kalacaktır. Diyelim ki Twitter'da bir koristuvach'ın son "tweetlerini" geri almak istiyorsunuz. Rails eklentinize yalnızca Twitter API ile nasıl etkileşimde bulunacağınızı (kendi kimliğinizi doğrulamak için), bir sorgu göndereceğinizi ve döndürülecek "yanıtların" türünü nasıl işleyeceğinizi söylemeniz yeterlidir.

Oluşturma API'si

Ön uç web öyküleri için arka uç API'sini temizleyerek Rails yardımcı programınızı oluşturmak isteyebilirsiniz veya yalnızca ön uç isterse JSON'un nasıl yazılacağını öğrenmek isteyebilirsiniz. Kimlik doğrulama işlevlerine sahip tam donanımlı bir RESTful API oluşturduğunuzda bu bölüm görünmez. Bu, API olarak ekinizle bağlantılı olarak sorunsuz bir şekilde tanıtılmıştır.

Temel bilgiler

Rails eklentinizin HTML yerine JSON'u dönüştürmesini istiyorsanız denetleyicinize bunu yapmasını söylemeniz gerekir. En mucizevi şey, aynı denetleyicinin, bilgisayarınızı tarayıcıdan çalıştırarak veya komut satırı aracılığıyla API'ye erişerek farklı türleri sırayla döndürebilmesidir. Bu, istenen dosyanın uzantısına bağlı olarak ne tür bir istek yapıldığı anlamına gelir; örneğin example.xml veya example.json.

Sunucu günlüğünü kontrol ederek Rails'in dosya türü hakkında ne "düşündüğünü" kontrol edebilirsiniz:

GET "/posts/new" 127.0.0.1 için 2013-12-02 15:21:08 -0800'de başlatıldı PostsController#new tarafından HTML olarak işleniyor

İlk satır size istek URL'sinin ne olduğunu söyler, ikinci satır ise isteklerin nerede olduğunu ve Rails'in bunları nasıl işlediğini anlatır. Yakbi vi vikoristovali Expanded.json olsaydı, şöyle görünürdü:

GET "/posts.json" 127.0.0.1 için 2013-12-04 12:02:01 -0800 PostsController#index'te JSON olarak başlatıldı

Bir test programı çalıştırıyorsanız farklı URL'leri sorgulamayı deneyin. Denetleyiciniz bunları işleyemiyorsa affı devre dışı bırakabilirsiniz ancak yine de Rails'in istekleriniz hakkında ne anladığını bulmanız gerekir.

JSON veya XML oluşturma

HTML yerine JSON veya XML oluşturmak istediğinize karar verirseniz denetleyicinize HTML yerine JSON veya XML oluşturmanız gerektiğini bildirmeniz gerekir. Bunu kazanmanın bir yolu #respond_to yöntemini kullanmaktır:

Sınıf KullanıcılarıDenetleyici< 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 durumda #respond_to, siz işleme bir onay yanıtı ekleyene kadar nesne formatını bloğa aktarır. Standart bir Rails şablonunu (bu uygulamada app/views/index.html.erb) kullanarak HTML oluşturursanız hiçbir şey elde edemezsiniz.

#render işlevi, çok çeşitli formatların nasıl oluşturulacağını anlamak için kullanışlıdır. Eğer json anahtarını iletirseniz, @users uygulamasındaki değerde #to_json ifadesini göreceksiniz. Bu, Ruby nesnelerinizi, onu isteyen eke iletilecek JSON satırlarına dönüştürür.

Bu şekilde API'nizi kaldıracaksınız. Elbette, bazı rutin olmayan konuşmalar üzerinde çalışmak istiyorsanız API oluşturma işlemi daha karmaşık olabilir, ancak her şeyi temel düzeyde tutun.

Dönen niteliklerin gösterimi

Yeniden bağlanmak istemeniz ancak istemcinin e-posta adresini kullanıcının nesnesiyle (Kullanıcı) aynı anda döndürmemeniz mümkündür. Bu durumda #to_json yöntemini çalıştıran nitelikleri değiştirerek döndürülecek öznitelikleri değiştirmek isteyeceksiniz.

Önceden #to_json yöntemini kendi sürümünüzle yeniden adlandırırdınız, ancak artık buna gerek yok; aslında bunun yerine #as_json yöntemini yeniden adlandıracaksınız. #to_json yönteminin yerine #as_json yöntemi kullanılır, böylece bu yöntemin değiştirilmesi örtülü olarak #to_json sonucunu değiştirir, ancak bunu belirli bir şekilde yapar.

#to_json iki şekilde çalışır: #as_json'u çalıştırır ve JSON'da işlenecek niteliklerin karmasını alır. Daha sonra ActiveSupport::json.encode kullanarak JSON kullanarak görüntü oluşturabilirsiniz. Daha sonra #as_json'u değiştirirken, #to_json yönteminin gerçekten değiştirmek istediğiniz kısmını daha spesifik olarak söylüyorsunuz.

Versiyonumuzda, ihtiyaç duymadığımız nitelikleri döndürecek şekilde modelimizde #as_json'u değiştiriyoruz:

# app/models/user.rb sınıfı Kullanıcı< ActiveRecord::Base # Вариант 1: Полное переопределение метода #as_json def as_json(options={}) { :name =>self.name ) # E-posta alanı DAHİL DEĞİLDİR end # Seçenek 2: Vikorist'in standart yöntemi #as_json def as_json(options=()) super(only: [:name]) end end

Ardından, denetleyicimizin artık JSON'u eskisi gibi işlemesine gerek kalmayacak (aşağıdaki uygulamada, HTML sorgusunun gönderilip gönderilmediğine bakılmaksızın JSON her zaman işlenecektir):

# app/controllers/users_controller.rb sınıfı UsersController< ApplicationController def index render json: User.all end end

#render kullanıyorsanız #to_json'a kendiniz tıklamanıza gerek olmadığını lütfen unutmayın; bunu sizin için yapabiliriz.

Heroku düğümleri, düzeltmeli sayfaların doğru görüntülenmesi için ek kısayollar çıkarabilir. Harika. Öncelikle statik sayfaları app/public dizininden kaldırmanız gerekebilir.

Güvenlik aramaları

Belki de API'ye yalnızca oturum açma amacıyla erişebilmek istiyorsunuz. Denetleyicideki kimlik doğrulamanız bu robot için zaten çalışabilir; yalnızca #before_action ayarlarının doğru olduğundan emin olun (örneğin, before_action:require_login). Giriş bilgilerinin yan tarafını görüntüleyebiliyorsanız işlevselliğe ihtiyacınız olabilir veya farklı verilerden dolayı suçlu olabilirsiniz. Oturumu kapatılmış istemcilerin önemli verileri almak için API'ye erişememesini istemezsiniz. Benzer şekilde, yetkisiz kullanıcıların HTML sayfanızda şarkı görüntülemesine izin vermemelisiniz.

Tarayıcı dışındaki programlardan (örneğin komut satırından) gelen istekleri işlemek istiyorsanız, kimlik doğrulama için tarayıcı çerezlerine güvenemezsiniz. Aslında çoğu API, kimlik doğrulama sürecinin bir parçası olarak güç belirteçleri sağlar. Önümüzdeki derste jetonlar hakkında biraz daha konuşacağız.

Önümüzdeki günler

Artık Rails programınızı yalnızca HTML değil aynı zamanda başka bir formatta çıktı almak için kullanma becerisine sahipsiniz. İlerlemek ve diğer satıcıların platformunuzun kaynaklarını kullanarak bir şeyler oluşturmasına izin vermek istiyorsanız (örneğin, müşteri olarak kimlik doğrulama yerine yazılımı kullanabilmeleri için), API sisteminizi kapsamlı bir şekilde oluşturmanız gerekecektir. Burada her şeyi vurgulamayacağız, bunun yerine aşağıdaki materyallere hayran kalacağız:

  • Awesome Rails API'leri Oluşturma makalesi, oyun uygulamalarının ve endüstri API standartlarının geliştirilmesine yönelik en iyi yaklaşımların bir tanımını içerir.

Servis Odaklı Mimari

Artık bir mimari yaklaşımı “Servis Odaklı Mimarlık” (SOA) adı altında sunmanın zamanı geldi. Ana fikir, gelirinizin anonim hizmetlerden, ödeme sistemi platformundan, müşteri kaydından, öneri modülünden vb. Her şeyi tek bir ana programda yapmak yerine, alt sistemleri dahili API'ler aracılığıyla dolaylı olarak birbirleriyle etkileşime giren bağımsız birimlere ayırırsınız.

Bu birçok nedenden dolayı iyidir. Programınız diğer parçaların nasıl çalıştığını bilmediğinden ve yalnızca API'leri aracılığıyla nasıl veri talep edeceğini bildiğinden, hizmet kodunda değer değişiklikleri yapabilir ve ek olanlara karar verebilirsiniz. ve daha önce olduğu gibi. Bir hizmeti tamamen diğeriyle değiştirebilirsiniz ve aynı API yöntemlerini kullanarak iletişim kurduğunuz sürece her şey daha da sorunsuz ilerleyecektir. Harici API'leri düzgün yazmak yerine programlarınızın (örneğin ödeme sistemleri) bir parçası olarak kullanabilirsiniz. Bir Python eklentisiyle etkileşime giren, bir Rails eklentisiyle etkileşime giren ve ek bir API kullanarak birbirlerine bağlansalar bile hepsi birlikte çalışan bir PHP eklentisi oluşturabilirsiniz.

Kural olarak, programınızla cildinizi olabildiğince özgür tutmaya çalışmak iyi bir fikirdir. SOA kavramı sizi programınızın diğer bölümlerine hangi yöntemleri vermek istediğinizi düşünmeye teşvik eder ve aynı zamanda kodunuzu daha temiz hale getirir. Üstelik programınızın her ana bileşeninin birbirinden bağımsız olduğunu varsayarsak, sorunları çok daha kolay aşabilecek ve kararlarınızı daha anlamlı hale getirebileceksiniz.

Programın tamamı için hizmet odaklı bir mimari geliştirmek, karmaşık bir sınıf ve yöntem üzerinde veya daha büyük ölçekte dev bir katlanabilir Ruby betiği geliştirmekle ilgilidir.

Hizmet odaklı mimariye geçişin en popüler örneklerinden biri Amazon.com'dur. Görünüşe göre 2002 yılında Jeff Bezos doğrudan tüm çalışma gruplarının SOA'ya geçmesi gerektiğini, aksi takdirde kovulacaklarını belirtti. Sumno Vidomy Blog yazısı Google'ın tarayıcısı, şirket içi kurumsal amaçlarla ve Amazon'un SOA üzerindeki baskısını ortaya çıkararak aniden halka açık hale geliyor. Bu harika bir okuma, dolayısıyla değerlendirmesi kolay ve Bezos'un yazısının ana noktaları yazıdan bir sonraki alıntıda yer alıyor:

1) Artık tüm komutlar verilerini ve işlevlerini hizmet arayüzleri aracılığıyla sağlıyor.

2) Komutların birbirleriyle diğer arayüzler aracılığıyla etkileşime girmesi gerekir.

3) İşlemler arası iletişimin diğer biçimleri: aynı doğrudan mesajlar, verilerin başka bir komuttan aynı doğrudan okunması, aynı bellek modelleri, aynı "arka kapılar" vb. Karşılıklı etkileşimin izin verilen tek yöntemi, hizmet arayüzüne bir sınır üzerinden erişimdir.

4) Teknolojinin kötü kokup kokmadığı. HTTP, Corba, Pubsub, güç protokolleri – farketmez. Bezos'u kesinlikle suçlamıyorum.

5) Tüm hizmet arayüzleri, hatasız olarak çağrıları kontrol edebilecek şekilde tasarlanmıştır. Ekip, şirketin geliştiricilerine arayüz sağlayacak şekilde planlama ve tasarım yapmalıdır. İyi suçlama.

6) Bu faydaları göz ardı eden herkes rahatlayacaktır.

SOA sağ tarafta ciddi değil. Elbette bu wiki'yle birlikte gelen pek çok sorun var - Amazon'dan "ders alma" hakkındaki bu yazıya hayret edin - ama aynı zamanda birçok avantajı da var.

Kendinize “oyun” eklemeleri yaparken SOA’yı elbette dert etmeyin ama bir bilişim şirketinde çalışmaya başladığınızda bu yiyecek mutlaka karşınıza çıkacaktır, o yüzden onu tanımak güzel bir şey. pratik.

Metanız

  1. JSON ve XML oluşturma hakkında bilgi edinmek için Rails Controller Framework'ün 7. Bölümünü okuyun.
  2. Kokulara bakmak zor değil (biraz uzakta oldukları için hemen hazırlanıyorlar), ancak isterseniz dersin alt kısmındaki Ek Kaynaklar bölümündeki Railscast'lere bir göz atarak hakkında daha fazla bilgi edinebilirsiniz. API'nin avantajları.

Visnovok

Javascript kursu sırasında eklentinizle API olarak daha fazlasını yapacağız. Bu kursta, daha kısa bir arka uç arayüzü için AJAX arka uçlarını kullanacak, aslında tam teşekküllü bir HTML sayfası yerine XML veya JSON verilerinin oluşturulmasını içeren bir dizi tam yığın eklenti oluşturacaksınız. Ardından, gerekli tüm verileri veritabanından çıkarmak ve aksi takdirde istemci tarafında (tarayıcıda) işlemek için Rails eklentiniz tarafından sağlanan API'ye dayanan bir grup tek taraflı Javascript eklentisi oluşturacaksınız. .

API ile etkileşime geçmenin en iyi yolu, onu oluşturmak ve onunla etkileşimde bulunmaktır; biz de projelerimizde buna odaklanıyoruz.

Belki de “API” terimini siz icat ettiniz. İşletim sistemi, web tarayıcısı ve güncellenen programlar sıklıkla tüketicilere yeni API'lerin duyurusunu yapıyor. API nedir?

uygulama programlama Arayüzü

API terimi bir kısaltmadır ve “Uygulama Programlama Arayüzü” anlamına gelir.

Bir restoranda API tse yak menüsü. Menüde kullanabileceğiniz şifalı bitkilerin bir listesinin yanı sıra cilt bitkilerinin bir açıklaması da bulunur. Hangi menü öğelerini istediğinizi belirtirseniz restoranın mutfağı işi tamamlar ve yemeği hazırlar. Restoranın bu yemeği nasıl hazırladığını tam olarak bilmiyorsunuz ve buna ihtiyacınız da yok.

Benzer şekilde API, vikorların gerçekleştirebileceği çeşitli işlemlerin yanı sıra ne yapılacağına dair bir açıklama da sağlar. Perakendecinin, örneğin işletim sisteminin nasıl oluşturulduğunu ve "Kaydet" iletişim kutusunun nasıl görüntülendiğini bilmesi gerekir. Sadece ekte neyin kullanılabileceğini bilmeleri gerekiyor.

Bu ideal bir metafor değil, ancak bazı geliştiricilerin sonuçları çıkarmak için API verilerini vermeleri gerekebilir; bu belki de daha çok, mutfağın üreteceği malzemelerle bir şeyler yapabileceğiniz kimerik bir restorana benzer.

API'ler, geliştiricilerin değerli bir iş kazanmak için platformun kaynaklarını hızlı bir şekilde kullanarak zamandan tasarruf etmelerine olanak tanır. Bu, parçalanan kod miktarının değiştirilmesine yardımcı olur ve aynı platform için eklentiler arasında uyumluluk yaratılmasına da yardımcı olur. API'ler donanım ve yazılım kaynaklarına erişimi kontrol edebilir.

API perakendecilerin hayatını kolaylaştırıyor

Diyelim ki iPhone için bir program geliştirmek istiyorsunuz. Apple iOS işletim sistemi, diğer tüm işletim sistemleri gibi, işinizi kolaylaştırmak için çok sayıda API arayüzü sağlar.

Örneğin, bir veya daha fazla web sayfasını görüntülemek için bir web tarayıcısı kullanmak istiyorsanız, programınız için sıfırdan bir web tarayıcısı programlamanıza gerek yoktur. İçinde ve
Programınıza bir WebKit (Safari) web tarayıcısı yüklemek için WKWebView API'sini kullanabilirsiniz.

iPhone kamerasından fotoğraf veya video çekmek istiyorsanız kamera arayüzünü yazmanıza gerek yok. Programınıza bir iPhone kamerası yüklemek için kamera API'sini kullanabilirsiniz. API olmasaydı, yazılım geliştiricilerin kameranın kendi yazılımını oluşturması ve kamera donanımının girdilerini yorumlaması gerekecekti. Apple işletim sisteminin geliştiricileri tüm bu önemli çalışmaları robot için geliştirdiyse, geliştiriciler kamera API arayüzünü kullanarak bir kamera ekleyebilir ve ardından programlarını yazmaya devam edebilirler. Ve eğer Apple kamera API'sini geliştirirse, onu kullanan tüm programlar bu değişiklikleri otomatik olarak hızlandıracaktır.

Bu tüm platformlar için geçerlidir. Örneğin, bir Windows iletişim penceresi açmak istiyor musunuz? API kimin içindir? Android'de parmak izi kimlik doğrulamasını desteklemek istiyor musunuz? Bu API için herhangi bir Android satıcısının parmak sensörünü test etmenize gerek yoktur. Perakendecilerin çarkı tekrar tekrar tekrarlamalarına gerek yok.

API arayüzleri kaynaklara erişim sağlar

API'ler ayrıca diğer programların erişmesine izin verilmeyen donanım aygıtlarına ve yazılım işlevlerine erişim sağlamak için de kullanılır. Bu nedenle API'ler genellikle pazarda büyük bir rol oynar.

Örneğin, daha önce bir web sitesini ziyaret ettiyseniz ve tarayıcınızdan, web sitesinin tam ayarlarınızı sorduğuna dair bildirimler aldıysanız, bu web sitesinin, web tarayıcınızda coğrafi konum API'sini kullanması gerekir. Web tarayıcıları, web tarayıcılarının verilerinize erişimi reddetmesini kolaylaştırmak için API'ler sağlıyor; yalnızca "Neredesiniz?" diye sorabilirler ve tarayıcının, fiziksel konumunuzu bulmak için GPS veya Wi-Fi bağlantılarına erişimle çalışması gerekir. konum.M_scescience.

Ancak tarayıcılar bu bilgileri bir API aracılığıyla da sağlar, böylece bu bilgilere erişim kontrol edilebilir. Bir web sitesi tam konumunuza erişimi reddetmek isterse, ona erişmenin tek yolu uzantı API'sini kullanmaktır. Ben, eğer web sitesi vikoristuvach yogo'yu çalıştırmaya çalışıyorsa, siz, koristuvach, bu talebe izin verebilir veya bu isteği düzenleyebilirsiniz. GPS sensörü gibi donanım kaynaklarına erişim yalnızca API aracılığıyla mümkündür, böylece tarayıcı donanıma erişimi kontrol edebilir ve programların yeteneklerini sınırlayabilir.

Aynı prensip, mobil programların API erişim kontrolü aracılığıyla uygulanabilecek izinlere sahip olduğu iOS ve Android gibi mevcut mobil işletim sistemleri için de geçerlidir. Örneğin kullanıcı kamera API’si üzerinden kameraya erişimi reddetmek isterse izin talebini değiştirebilirsiniz ve program cihazınızın kamerasına erişime izin vermeyecektir.

Windows, Mac ve Linux gibi izinlere izin veren dosya sistemleri, dosya sistemi API'sini ayarlama izinlerine sahiptir. Tipik bir programın, paylaşılmayan bir fiziksel sabit sürücüye doğrudan erişimi yoktur. Bu durumda program, API aracılığıyla dosyalara erişimi reddedebilir.

API, hizmetler arasındaki iletişim için Wikipedia'dır

API'ler başka nedenlerden dolayı da eleştiriliyor. Örneğin, daha önce bir Google Haritalar nesnesi indirdiyseniz, onu bir web sitesine gönderdiyseniz, o web sitesi o haritayı yüklemek için Google Haritalar API'sını kullanır. Google, web tarayıcıları için bunlara benzer API'ler sağlar; tarayıcılar daha sonra bu API'leri karmaşık nesneleri doğrudan web sitelerinde toplamak için kullanabilirler. Bu tür API'ler olmadığından perakendecilerin web sitesine küçük bir etkileşimli harita yerleştirmek için kendi kartlarını oluşturup göndermeleri gerekebilir.

Bu API sayesinde Google, üçüncü taraf web sitelerindeki Google Haritalar'a erişimi kontrol edebilir ve bu kişilerin bunu uygun bir şekilde kötüye kullanmalarını ve örneğin Google Haritalar web sitesinin görüntülediği çerçeveyi dikkatsizce sızdırmaya çalışmamalarını sağlayabilir.

Çok sayıda farklı çevrimiçi hizmet var. Google Çeviri'den metin çevirmek veya Facebook yorumlarını veya Twitter yanıtlarını web sitelerinde görüntülemek için bir API oluşturun.

OAuth standardı ayrıca, bir siteye başka bir hizmet aracılığıyla (örneğin, söz konusu site için yeni bir hesap hesabı oluşturmadan yeni bir web sitesinde oturum açmak için Facebook, Google veya Twitter hesap hesaplarını kullanarak) oturum açmanıza olanak tanıyan bir dizi API'yi de tanımlar. API'ler, perakendecilerin hizmetle nasıl etkileşimde bulunduğunu ve perakendecilerin üretmekten sorumlu olduğu ürün türlerini belirleyen standart sözleşmelerdir.

Bu makaleyi okuduysanız API gibi konularda en iyi ifadelere sahip olacaksınız. Bu arada, geliştirici olmadığınız için API'nin ne olduğunu bilmenize gerek yok. Yazılım platformunun veya hizmetinin çeşitli donanım veya hizmetler için yeni API'ler eklediğini biliyorsanız geliştiricilerin bu tür işlevleri kullanması daha kolay olabilir.