API là gì

API là gì

các Các từ viết tắt của API, bạn sẽ thấy chúng nhiều hơn một lần và hai lần khi bạn đọc các bài báo về phần mềm. Nhưng không phải ai cũng biết API thực sự là gì. Đó là lý do tại sao chúng tôi làm rõ nó trong bài viết này. Đầu tiên phải nói rằng chúng là chữ viết tắt của Application Programming Interface, nghĩa là trong tiếng Tây Ban Nha, Giao diện Lập trình Ứng dụng. Và nhiều khi nó tạo ra sự nhầm lẫn ngay cả với những người biết một số lập trình.

Ví dụ: Arduino có API lập trình của riêng mình, cung cấp một loạt các chức năng mà bạn có thể sử dụng trong Arduino IDE hoặc các môi trường khác để lập trình vi điều khiển cho phép bạn tạo các dự án của mình. Nhưng ... bạn có thể nói cho tôi biết sự khác biệt giữa thư viện lập trình và API? Có sự khác biệt nào giữa khung và API không? API có giống ABI không? Có nhiều nghi vấn có lẽ tiếp tục tạo ra sự nhầm lẫn và chúng tôi sẽ làm rõ ngay bây giờ.

Tôi không biết nếu bạn biết điều đó ngôn ngữ cấp thấp, như trình hợp dịch hoặc ASM, phụ thuộc trực tiếp vào kiến ​​trúc phần cứng, trong khi những kiến ​​trúc cấp cao trừu tượng hóa từ phần cứng để tạo điều kiện thuận lợi cho nhiệm vụ của lập trình viên, nhưng phụ thuộc vào hệ điều hành (syscalls) hoặc vào một số API nhất định, v.v. Vì vậy, tất cả những điều này nghe có vẻ không giống tiếng Trung Quốc đối với bạn, hãy xem nó nói về điều gì ...

API là gì?

một API là một công cụ mà các nhà phát triển được cung cấp để họ có thể sử dụng một loạt các hàm, chương trình con và thủ tục hoặc phương thức cho OOP có thể được sử dụng thông qua các thư viện hiện có. Trong số những gì API cung cấp là từ các chức năng để tạo ứng dụng đơn giản, các chức năng liên quan đến AI, tạo đồ họa, quản lý tài nguyên phần cứng, v.v.

Ví dụ: tôi chắc rằng bạn đã quen thuộc với các API, chẳng hạn như API được cung cấp bởi Linux thông qua thư viện glibc hoặc đồ họa như OpenGL và Vulkan hoặc những cái khác như OpenCL cho tính toán không đồng nhất, OpenXR cho thực tế ảo và tăng cường, v.v. Các hệ điều hành và phần mềm khác cũng bao gồm các API của riêng chúng để các lập trình viên khác có thể tạo các addon, plugin hoặc mô-đun cho hệ thống đó, v.v.

Ví dụ với Arduino

Nếu bạn có một huy hiệu Arduino và bạn thường xuyên sử dụng Arduino IDE, hoặc bất kỳ môi trường phát triển nào khác cho Arduino, bạn sẽ biết rằng khi tạo mã, bạn sẽ sử dụng nhiều tùy chọn để ra lệnh cho bộ vi điều khiển của mình thực hiện một loạt hành động. Ví dụ, pinMode () là một hàm điển hình để cấu hình một chân Arduino, phải không?

Khi bạn viết pinMode (9, INPUT)Ví dụ: bạn đang chỉ ra rằng chân 9 của bảng Arduino sẽ hoạt động như một đầu vào, tức là bộ vi điều khiển sẽ chờ thông tin nhập qua chân đó để đọc và thực hiện một hành động. Nhưng bạn đã bao giờ tự hỏi làm thế nào anh ta có thể hiểu được lệnh đó?

Chà, Arduino có một API phát triển được cung cấp cho chúng tôi. Thư viện của bên thứ ba có thể được thêm vào API này như chúng ta đã thấy trong nhiều ví dụ trên blog này. Giống như SparkFun cho một số cảm biến nhất định, v.v. Với tất cả những điều này, các chức năng có thể được nhập vào Arduino IDE và nó sẽ dịch mã đúng cách để tải nó vào bộ nhớ của vi điều khiển để nó có thể xử lý.

Nếu bạn không có API này, bạn sẽ không thể tạo các chương trình này cho Arduino theo cách đơn giản như vậy, vì chúng ta nên cố gắng tạo chúng trong mã lắp ráp cho vi điều khiển ATMega328P, nghĩa là trong ASM cho kiến ​​trúc AVR. Và điều đó sẽ phức tạp hơn nhiều, vì bạn sẽ phải trực tiếp sử dụng các hướng dẫn có sẵn của ISA này. Nếu vậy, bạn sẽ không chỉ phải biết đầy đủ về danh mục của ISA đó, mà còn các khía cạnh khác như số lượng đăng ký, v.v. Đó là, bạn nên có kiến ​​thức cấp thấp về phần cứng mà bạn đang làm việc.

qua ví dụ, mã ASM Những gì bạn nên tạo ra để đèn LED nhấp nháy theo vòng lặp sẽ là:

<br data-mce-bogus="1">

.ORG 0x0000
; the next instruction has to be written to
; address 0x0000
rjmp START
; the reset vector: jump to "main"
START:
ldi r16, low(RAMEND) ; set up the stack
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
ldi r16, 0xFF
; load register 16 with 0xFF (all bits 1)
out DDRB, r16
; write the value in r16 (0xFF) to Data
; Direction Register B
LOOP:
sbi PortB, 5
; switch off the LED
rcall delay_05
cbi PortB, 5
; wait for half a second
; switch it on
rcall delay_05 ; wait for half a secon
rjmp LOOP ; jump to loop
DELAY_05:
; the subroutine:
ldi r16, 31
; load r16 with 31
OUTER_LOOP:
; outer loop label
ldi r24, low(1021) ; load registers r24:r25 with 1021, our new
; init value
ldi r25, high(1021) ; the loop label
DELAY_LOOP:
; "add immediate to word": r24:r25 are
; incremented
adiw r24, 1
; if no overflow ("branch if not equal"), go
; back to "delay_loop"
brne DELAY_LOOP
dec r16
; decrement r16
brne OUTER_LOOP
ret
; and loop if outer loop not finished
; return from subroutine

Trong khi nhờ có API, toàn bộ cơ sở vật chất, viết ở cấp độ cao mã tương đương sau (ngắn hơn và trực quan hơn nhiều):

<br data-mce-bogus="1">

int ledPin = 13; 		// LED que se encuentra en el pin 13
   void setup(){ 
   pinMode(ledPin, OUTPUT);	// El p1n 13 será una salida digital 
} 
void loop(){ 
   digitalWrite(ledPin, HIGH);	// Enciende el LED
   delay(1000); 				// Pausa de 1 segundo 
   digitalWrite(ledPin, LOW); 	// Apaga el LED 
   delay(1000);				// Pausa de 1 segundo 

Sự khác biệt với ABI

API so với Linux ABI

ABI là một thuật ngữ ít được biết đến hơn, nó là một Giao diện nhị phân ứng dụng, hoặc bằng tiếng Anh Giao diện nhị phân ứng dụng. Trong trường hợp này, nó là giao diện giữa các mô-đun của chương trình, thường là giữa thư viện hoặc hệ điều hành ngôn ngữ máy cho kiến ​​trúc mà bạn là: SPARC, AMD64, ARM, PPC, RISC-V, v.v.

Nhờ ABI, cách gọi các hàm được xác định, định dạng nhị phân có thể hiểu máy bạn đang biên dịch hoặc hệ thống gọi, cách xử lý các ngoại lệ, cách dữ liệu được truyền, v.v.

Sự khác biệt với Khung

Un khuôn khổ hoặc khuôn khổ nhiều hơn là một bộ công cụ theo ý của bạn để giúp phát triển một dự án nhất định. Công việc nổi tiếng thường đặt ra một số tiêu chuẩn mã hóa, cung cấp các thành phần hữu ích, v.v. Ví dụ: JUnit là một khuôn khổ cho Java, hoặc Symfony / Cake cho PHP, v.v.

Sự khác biệt với SDK và NDK

SDK là một Bộ công cụ phát triển phần mềm, tức là, một bộ công cụ phát triển phần mềm. Nó vượt xa những gì là một khuôn khổ hoặc một API. Ví dụ có thể là Android Studio hoặc iOS xCode, v.v. Ví dụ: cái đầu tiên, ngoài bản thân API Android, còn bao gồm IDE hoặc môi trường phát triển tích hợp để lập trình và biên dịch, thư viện, công cụ, v.v.

Hơn nữa, NDK (Bộ công cụ phát triển bản địa) nó là một bổ sung. Ví dụ: Android NDK cho phép các nhà phát triển sử dụng lại mã C / C ++ bằng cách đưa nó vào các ứng dụng thông qua JNI (Java Native Interface) ...

Sự khác biệt với thư viện

Sơ đồ Glibc Wikipedia

Cuối cùng, thư viện là một tập hợp các mã nguồn có thể tái sử dụng điều đó làm cho cuộc sống của các lập trình viên trở nên dễ dàng hơn. Ví dụ, bên trong thư viện C stdio.h có một hàm printf để in văn bản trên màn hình. Để có thể thực hiện được điều này, cần có mã nguồn để hệ điều hành thực hiện nhiệm vụ này. Nhưng vì nó là một thứ gì đó rất lặp lại được sử dụng thường xuyên, chỉ cần gọi thư viện đó, bạn có thể sử dụng printf mà không cần viết tất cả mã từ đầu. Nói cách khác, nói cách khác, chúng có thể được xem như các khối đúc sẵn.

Trên thực tế, một thư viện và một API có thể dễ bị nhầm lẫn, thư viện được bao bọc bên trong một API. Thí dụ glibc...

Tôi hy vọng rằng sau này bạn có một ý tưởng rõ ràng hơn về API, ABI, khuôn khổ, SDK và thư viện là gì, ngoài việc có thể phân biệt giữa chúng từ bây giờ.


Hãy là người đầu tiên nhận xét

Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.