Что такое API: объяснение на пальцах

0
1044
views

Когда речь заходит об API, большинство людей представляют REST API (т. е. веб-API), но это не единственный вариант. В этой статье я расскажу, что такое API. Также мы с вами создадим REST API при помощи FastAPI (Python).

Что такое API?

Если говорить попроще, API — просто конструкт, который абстрагирует части сложного кода (JavaScript DOM API) или обеспечивает связь между кодовыми базами (между фронтендом и бэкендом, например). API также могут быть очень полезны для «соединения» языков программирования и передачи данных из кода на одном языке в код на другом.

Отличная статья на эту тему есть у Mozilla. Короткая выдержка из этой статьи:

«Прикладные программные интерфейсы (Application Programming Interface, API) — это конструкты, написанные на языках программирования и позволяющие разработчикам более легко создавать сложный функционал. Они абстрагируют от вас сложный код, давая возможность использовать вместо него более простой синтаксис».

И прекрасная аналогия (тоже от Mozilla). Представьте себе электрические приборы в своем доме. Если вы хотите использовать какой-то прибор, вы вставляете его вилку в розетку — и он работает. Вы не пытаетесь каждый раз вручную скручивать провода — это неэффективно, а если вы не электрик, то еще и небезопасно.

Виды API

API бывают разных видов, и об этом стоит знать и помнить. Есть програмноцентричные API, как в Java (они позволяют объектам общаться друг с другом) и веб-центричные API, такие как REST API (Representational State Transfer), GraphQL API и многие другие.

Как создать API самостоятельно

Популярные языки для написания API — JavaScript, Python, Go, Rust (пишут и на других, но на этих чаще всего).

Давайте напишем API на Python: с FastAPI это очень просто!

Вообще есть несколько вариантов, как создать API на Python (Flask, Quart, FastAPI). Я выбрал FastAPI, потому что он быстрый и создан специально для написания API.

Для начала установим все необходимое.

pip install fastapi uvicorn

# uvicorn - ASGI-сервер, опционален для этого руководства

Писать API на Python или JavaScript очень просто, потому что это всего лишь функция с декоратором.

from fastapi import FastAPI

app = FastAPI()

@app.get("/")
def hello():
    return {"Hello": "World"}

И это все!

Сперва мы импортировали fastapi, затем объявили app. Вы можете передать в app многие настройки, и fastapi автоматически сгенерирует Swagger UI документацию и страницу Redoc (на картинке внизу — Swagger-документация, доступная на конечной точке (англ. endpoint) /docs.

У вас могут быть аргументы, например:

@app.get("/items")
def read_item(q: Optional[str] = None):
    return {"q": q}

Это вернет bread для q по адресу http://127.0.0.1:8000/items?q=bread.

У вас также могут быть динамичные конечные точки:

@app.get("/user/{user_name}")
def read_item(user_name:str):
    return {"username": user_name}

Если вы теперь перейдете по адресу http://127.0.0.1:8000/user/dhravya, получите «username: dhravya».

А как запустить сервер?

Используйте команду:

uvicorn main:app --reload

Она покажет следующее:

INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit)
INFO: Started reloader process [28720]
INFO: Started server process [28722]
INFO: Waiting for application startup.
INFO: Application startup complete.

Иии… все! API — это просто. Теперь вы можете подключить ваш фронтенд на React к бэкенду на Python.


От редакции Techrocks. Если эта статья не дала полного понимания, что такое API, попробуйте почитать также


Для развертывания я использую следующую команду и реверс-прокси с Apache:

pkill gunicorn && gunicorn app:app -w 1 -k uvicorn.workers.UvicornWorker -b "127.0.0.1:8000" --daemon

Но это, конечно, самые основы. Почитайте документацию FastAPI и попробуйте поиграться с ним.

В вебе полно API. Их использование сэкономит вам время! Зайдите на https://rapidapi.com и посмотрите, какие варианты предлагаются.

От редакции Techrocks. Также рекомендуем статью «API для фронтенд-разработки».

Перевод статьи «APIs: Explained to a 5 year old».

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here