
Hvis du læser denne artikel, er du sandsynligvis allerede bekendt med de muligheder, der åbner sig ved brug af API (Application Programming Interface).
Ved at tilføje en af de mange offentlige API'er til din applikation kan du udvide funktionaliteten af denne applikation eller supplere den med nødvendige data. Men hvad hvis du har udviklet en unik funktion, som du ønsker at dele med fællesskabet?
Svaret er simpelt: du skal .
Selvom det ved første øjekast kan virke som en udfordrende opgave, er det faktisk ret ligetil. Vi vil vise, hvordan det gøres med Python.
Hvad skal der til for at komme i gang
For at udvikle et API kræves:
- Python 3;
- — et simpelt og brugervenligt framework til oprettelse af webapplikationer;
- — et udvidelsesmodul til Flask, der muliggør hurtig udvikling af REST API med minimal opsætning.
Installation udføres med kommandoen:
pip install flask-restfulVi anbefaler et gratis intensivkursus i programmering for begyndere:
— 26.–28. august. Et gratis intensivkursus, der hjælper med at forstå, hvordan assistent-bots fungerer, detaljerne ved arbejdet med Telegram API og andre nuancer. De tre bedste deltagere vil modtage 30.000 rubler fra Skillbox..
Før vi går i gang
Vi skal udvikle en RESTful API med grundlæggende .
For fuldt ud at forstå opgaven, lad os gennemgå to termer, der er nævnt ovenfor.
Hvad er REST?
REST API (Representational State Transfer) er et API, der bruger HTTP-anmodninger til at udveksle data.
REST API'er skal overholde bestemte kriterier:
- Klient-server arkitektur: klienten interagerer med brugergrænsefladen, mens serveren håndterer backend og datalagring. Klienten og serveren er uafhængige; hver af dem kan erstattes separat.
- Stateless — ingen klientdata gemmes på serveren. Sessionens tilstand gemmes på klientsiden.
- Cacheability — klienter kan cache svar fra serveren for at forbedre den samlede præstation.
Hvad er CRUD?
CRUD — en programmeringskoncept, der beskriver fire grundlæggende handlinger (create, read, update og delete).
I REST API svarer typer anmodninger og anmodningsmetoder til handlinger som post, get, put, delete.
Nu hvor vi har gennemgået de grundlæggende termer, kan vi begynde at oprette API'et.
Udvikling
Lad os oprette et citatrepository om kunstig intelligens. AI er en af de mest dynamisk voksende teknologier i dag, og Python er et populært værktøj til arbejde med AI.
Med dette API vil Python-udvikleren hurtigt kunne få informationer om AI og lade sig inspirere af nye resultater. Hvis udvikleren har værdifulde tanker om emnet, kan han tilføje dem til repositoryet.
Lad os begynde med at importere de nødvendige moduler og indstille Flask:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)I dette snippet er Flask, Api og Resource de klasser, vi har brug for.
Reqparse er et grænseflade til parsing af anmodninger i Flask-RESTful… Vi får også brug for random-modulet til at vise et tilfældigt citat.
Nu vil vi oprette et citatrepository om AI.
Hver post i repoet vil indeholde:
- et unikt ID;
- navnet på citatets forfatter;
- citatet.
Da dette blot er et eksempel til læring, vil vi gemme alle poster i en Python-liste. I en rigtig applikation ville vi sandsynligvis bruge en database i stedet.
ai_quotes = [
{
"id": 0,
"author": "Kevin Kelly",
"quote": "Forretningsplanerne for de næste 10.000 startups er nemme at forudsige: " +
"Tag X og tilføj AI."
},
{
"id": 1,
"author": "Stephen Hawking",
"quote": "Udviklingen af fuld kunstig intelligens kunne " +
"betýde slutningen på menneskeheden… " +
"Den ville starte af sig selv og redesigne " +
"sig selv med en stadigt stigende hastighed. " +
"Mennesker, der er begrænset af langsom biologisk evolution, " +
"kunne ikke konkurrere og ville blive overgået."
},
{
"id": 2,
"author": "Claude Shannon",
"quote": "Jeg forestiller mig en tid, hvor vi vil være for robotter, hvad " +
"hunde er for mennesker, " +
"og jeg hepper på maskinerne."
},
{
"id": 3,
"author": "Elon Musk",
"quote": "Fremdriften inden for kunstig intelligens " +
"(jeg taler ikke om snæver AI) " +
"er utrolig hurtig. Medmindre du har direkte " +
"kontakt til grupper som Deepmind, " +
"har du ingen anelse om, hvor hurtigt — det vokser " +
"i et tempo, der nærmer sig eksponentiel. " +
"Risikoen for, at noget alvorligt farligt " +
"sker, ligger inden for fem års tidsramme." +
"10 år højst."
},
{
"id": 4,
"author": "Geoffrey Hinton",
"quote": "Jeg har altid været overbevist om, at den eneste måde " +
"at få kunstig intelligens til at fungere " +
"er at udføre beregninger på en måde, der ligner den menneskelige hjerne. " +
"Det er det mål, jeg har forfulgt. Vi gør fremskridt, " +
"men vi har stadig meget at lære om " +
"hvordan hjernen faktisk fungerer."
},
{
"id": 5,
"author": "Pedro Domingos",
"quote": "Folk bekymrer sig om, at computere vil " +
"blive for kloge og overtage verden, " +
"men det virkelige problem er, at de er for dumme " +
"og allerede har overtaget verden."
},
{
"id": 6,
"author": "Alan Turing",
"quote": "Det synes sandsynligt, at når maskinens tænkemåde " +
"først er startet, vil det ikke tage lang tid " +
"før de overgår vores skrøbelige evner… " +
"De ville kunne samtale " +
"med hinanden for at skærpe deres intellekt. " +
"På et tidspunkt bør vi derfor " +
"forvente, at maskinerne overtager kontrollen."
},
{
"id": 7,
"author": "Ray Kurzweil",
"quote": "Kunstig intelligens vil nå " +
"menneskelige niveauer omkring 2029. " +
"Hvis vi ser længere frem til, lad os sige, 2045, " +
"vil vi have ganget intelligensen, " +
"den menneskelige biologiske maskineintelligens " +
"i vores civilisation en milliard gange."
},
{
"id": 8,
"author": "Sebastian Thrun",
"quote": "Ingen formulerer det på denne måde, men jeg mener " +
"at kunstig intelligens " +
"næsten er en humaniora-disciplin. Det er virkelig et forsøg " +
"på at forstå menneskelig intelligens og menneskelig kognition."
},
{
"id": 9,
"author": "Andrew Ng",
"quote": "Vi laver denne analogi, at AI er den nye elektricitet." +
"Elektricitet transformerede industrier: landbrug, " +
"transport, kommunikation, fremstilling."
}
]Nu skal vi oprette en ressourceklasse Quote, som vil definere operationerne for vores APIs endepunkter. Inden i klassen skal der deklareres fire metoder: get, post, put, delete.
Lad os starte med metoden GET
Den giver mulighed for at hente en bestemt citat ved at angive dens ID eller et tilfældigt citat, hvis ID ikke er angivet.
class Quote(Resource):
def get(self, id=0):
if id == 0:
return random.choice(ai_quotes), 200
for quote in ai_quotes:
if(quote["id"] == id):
return quote, 200
return "Citat ikke fundet", 404GET-metoden returnerer et tilfældigt citat, hvis ID har standardværdien, altså når metoden kaldes, uden at ID er angivet.
Hvis ID er angivet, så søger metoden blandt citaterne og finder det, der har det angivne ID. Hvis intet findes, vises meddelelsen “Citat ikke fundet, 404”.
Husk: Metoden returnerer HTTP-status 200 i tilfælde af en succesfuld anmodning og 404, hvis posten ikke findes.
Lad os nu oprette POST-metoden for at tilføje et nyt citat til arkivet.
Den vil modtage identifikatoren for hver ny citat, der indtastes. Desuden vil POST bruge reqparse til at analysere parametre, som vil komme i anmodningens krop (forfatter og citattekst).
def post(self, id):
parser = reqparse.RequestParser()
parser.add_argument("author")
parser.add_argument("quote")
params = parser.parse_args()
for quote in ai_quotes:
if(id == quote["id"]):
return f"Citat med id {id} eksisterer allerede", 400
quote = {
"id": int(id),
"author": params["author"],
"quote": params["quote"]
}
ai_quotes.append(quote)
return quote, 201I den ovenstående kode modtog POST-metoden ID for citatet. Derefter, ved hjælp af reqparse, fik den forfatteren og citatet fra anmodningen og gemte dem i en params-ordbog.
Hvis et citat med det angivne ID allerede eksisterer, viser metoden en tilsvarende meddelelse og kode 400.
Hvis et citat med det angivne ID endnu ikke er oprettet, opretter metoden en ny post med det angivne ID og forfatter samt andre parametre. Derefter tilføjer den posten til listen ai_quotes og returnerer posten med det nye citat sammen med kode 201.
Nu opretter vi PUT-metoden for at ændre et eksisterende citat i arkivet.
def put(self, id):
parser = reqparse.RequestParser()
parser.add_argument("author")
parser.add_argument("quote")
params = parser.parse_args()
for quote in ai_quotes:
if(id == quote["id"]):
quote["author"] = params["author"]
quote["quote"] = params["quote"]
return quote, 200
quote = {
"id": id,
"author": params["author"],
"quote": params["quote"]
}
ai_quotes.append(quote)
return quote, 201PUT-metoden, ligesom i det forrige eksempel, tager ID og input og parser citatparametrene ved hjælp af reqparse.
Hvis citatet med det angivne ID eksisterer, opdaterer metoden det med de nye parametre og returnerer derefter det opdaterede citat med koden 200. Hvis citatet med det angivne ID endnu ikke findes, oprettes der en ny post med koden 201.
Endelig lad os oprette en DELETE-metode til at slette det citat, som ikke længere inspirerer.
def delete(self, id):
global ai_quotes
ai_quotes = [quote for quote in ai_quotes if quote["id"] != id]
return f"Citat med id {id} er slettet.", 200Denne metode modtager ID'et på citatet ved indtastning og opdaterer listen ai_quotes ved at bruge den globale liste.
Nu hvor vi har oprettet alle metoderne, er det eneste, vi skal gøre, at tilføje resource til API'et, angive stien og køre Flask.
api.add_resource(Quote, "\/ai-quotes", "\/ai-quotes\/", "\/ai-quotes\/<int:id>")
if __name__ == '__main__':
app.run(debug=True)Vores REST API-service er klar!
Dernæst kan vi gemme koden i en fil app.py og køre den i konsollen ved hjælp af kommandoen:
python3 app.pyHvis alt går godt, vil vi få noget, der ligner dette:
* Debug-tilstand: aktiv
* Kører på :5000\/ (Tryk CTRL+C for at afslutte)
* Genstarter med stat
* Debugger er aktiv!
* Debugger PIN: XXXXXXX
Tester API'et
Når API'et er oprettet, skal det testes.
Dette kan gøres ved hjælp af kommandolinjeværktøjet curl eller klienten Insomnia REST, eller ved at offentliggøre API'et på Rapid API.

Offentliggør vores API
RapidAPI er verdens største marked med over 10.000 API'er (og omkring 1 million udviklere).
RapidAPI tilbyder ikke kun en enkelt grænseflade til arbejde med tredjeparts API'er, men giver også mulighed for hurtigt og problemfrit at offentliggøre dit eget API.
For at , først skal det offentliggøres på en server online. I vores tilfælde vil vi bruge . At arbejde med det bør ikke give nogen problemer, ().
Hvordan man offentliggør dit API på Heroku
1. Installer Heroku.
Først skal du registrere dig og installere Heroku Command Line Interface (CLI). Dette fungerer på Ubuntu 16+.
sudo snap install heroku —classic
Dernæst logger vi ind:
heroku login
2. Tilføj de nødvendige filer.
Nu skal vi tilføje filer til offentliggørelse i mappen i vores applikation:
- requirements.txt med en liste over nødvendige Python-moduler;
- Procfile, som angiver, hvilke kommandoer der skal udføres for at starte applikationen;
- .gitignore — til at udelukke filer, der ikke er nødvendige på serveren.
Filen requirements.txt vil indeholde følgende linjer:
- flask
- flask-restful
- gunicorn
Bemærk venligst: vi har tilføjet gunicorn (Python WSGI HTTP Server) til listen, da vi skal køre vores applikation på serveren.
Procfile vil indeholde:
web: gunicorn app:app
Indholdet af .gitignore:
*.pyc
__pycache__/Nu hvor filerne er oprettet, lad os initialisere git-repoet og lave en commit:
git init
git add
git commit -m "Første API-commit"3. Opret et nyt Heroku-applikation.
heroku createSender master branch til den fjernede Heroku-repo:
git push heroku masterNu kan du begynde ved at åbne API Service ved hjælp af kommandoerne:
heroku ps:scale web=1
heroku open
API'en vil være tilgængelig på adressen .
Sådan tilføjes din Python API til RapidAPI-markedspladsen
Når API-servicen er offentliggjort på Heroku, kan du tilføje den til Rapid API. Her er om dette emne.
1. Opret en RapidAPI-konto.
![]()
Registrer en gratis konto – dette kan gøres via Facebook, Google, GitHub.

2. Tilføj API'en til kontrolpanelet.

3. Indtast derefter generel information om din API.

4. Efter at have klikket på "Add API", vises en ny side, hvor information om vores API kan indtastes.

5. Nu kan du enten indtaste API-endepunkterne manuelt eller uploade ved hjælp af OpenAPI.

Nu skal endepunkterne for vores API defineres på siden Endpoints. I vores tilfælde svarer endepunkterne til CRUD-konceptet (get, post, put, delete).

Dernæst skal vi oprette et GET AI Quote endepunkt, som returnerer et tilfældigt citat (hvis ID'et er standard) eller et citat for det angivne ID.
For at oprette endepunktet skal du klikke på knappen "Create Endpoint".

Gentag denne proces for alle andre API-endepunkter. Det er alt! Tillykke, du har offentliggjort din API!
Hvis alt er i orden, vil API-siden se nogenlunde sådan ud:

Konklusion
I denne artikel har vi undersøgt processen med at oprette vores eget RESTful API Service på Python, samt hvordan man offentliggør API'en i skyen Heroku og tilføjer den til kataloget RapidAPI.
Men i testversionen blev kun de grundlæggende principper for API-udvikling præsenteret – sådanne nuancer som sikkerhed, fejltolerance og skalerbarhed blev ikke behandlet.
Når du udvikler et rigtigt API, skal alt dette tages i betragtning.
Kilde: habr.com
