
Om du lÀser den hÀr artikeln Àr det troligt att du redan Àr bekant med de möjligheter som öppnas genom att anvÀnda API (Application Programming Interface).
Genom att lÀgga till en av de mÄnga öppna API:erna i din applikation kan du utöka funktionaliteten i den eller komplettera den med nödvÀndiga data. Men vad hÀnder om du har utvecklat en unik funktion som du vill dela med gemenskapen?
Svaret Àr enkelt: du behöver .
Ăven om det först verkar vara en svĂ„r uppgift Ă€r det faktiskt ganska enkelt. Vi kommer att berĂ€tta hur du gör detta med hjĂ€lp av Python.
Vad som behövs för att börja arbeta
För att utveckla ett API behövs:
- Python 3;
- â ett enkelt och lĂ€ttanvĂ€nt ramverk för att skapa webbapplikationer;
- â ett tillĂ€gg för Flask som gör att du snabbt kan utveckla ett REST API med minimal konfiguration.
Installation görs med kommandot:
pip install flask-restfulVi rekommenderar en gratis intensivkurs i programmering för nybörjare:
â 26â28 augusti. En gratis intensivkurs som ger en förstĂ„else för hur assistentbots fungerar, sĂ€rskilt nĂ€r det gĂ€ller att arbete med API:er i Telegram och andra nyanser. De tre bĂ€sta deltagarna kommer att fĂ„ 30 000 rubel frĂ„n Skillbox..
Innan vi börjar
Vi planerar att utveckla ett RESTful API med grundlÀggande .
För att fullt ut förstÄ uppgiften, lÄt oss gÄ igenom tvÄ termer som nÀmndes ovan.
Vad Àr REST?
REST API (Representational State Transfer) Àr ett API som anvÀnder HTTP-förfrÄgningar för att utbyta data.
REST API ska uppfylla vissa kriterier:
- Klient-serverarkitektur: klienten interagerar med anvÀndargrÀnssnittet, medan servern hanterar backend och datalagring. Klienten och servern Àr oberoende, sÄ vem som helst kan bytas ut oberoende av den andra.
- Stateless â inga klientdata sparas pĂ„ servern. SessionstillstĂ„ndet lagras pĂ„ klientens sida.
- Cachebarhet â klienter kan cacha serverns svar för att förbĂ€ttra den övergripande prestandan.
Vad Àr CRUD?
CRUD Àr en programmeringskoncept som beskriver fyra grundlÀggande operationer (create, read, update och delete).
I REST API:s sammanhang korresponderar typerna av förfrÄgningar och förfrÄgningsmetoder med operationer som post, get, put och delete.
Nu nÀr vi har klargjort de grundlÀggande termerna kan vi gÄ vidare med att skapa ett API.
Utveckling
LÄt oss skapa ett citat-repository om artificiell intelligens. AI Àr en av de mest snabbt vÀxande teknologierna idag, och Python Àr ett populÀrt verktyg för att arbeta med AI.
Med detta API kommer Python-utvecklaren snabbt att kunna hÀmta information om AI och inspireras av nya framsteg. Om utvecklaren har vÀrdefulla tankar kring Àmnet kan han eller hon lÀgga till dem i repositoryt.
LÄt oss börja med att importera de nödvÀndiga modulerna och stÀlla in Flask:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)I detta stycke Àr Flask, Api och Resource klasserna vi behöver.
Reqparse Àr ett grÀnssnitt för att parsa begÀrningar i Flask-RESTful⊠Vi kommer ocksÄ att behöva modulen random för att visa ett slumpmÀssigt citat.
Nu kommer vi att skapa ett citat-repository om AI.
Varje post i repo kommer att innehÄlla:
- ett digitalt ID;
- namnet pÄ citatförfattaren;
- citatet.
Eftersom detta endast Àr ett exempel för lÀrande syften kommer vi att spara alla poster i en Python-lista. I en verklig applikation skulle vi förmodligen anvÀnda en databas istÀllet.
ai_quotes = [
{
"id": 0,
"author": "Kevin Kelly",
"quote": "AffÀrsplanerna för de kommande 10 000 startups Àr lÀtta att förutse: " +
"Ta X och lÀgg till AI."
},
{
"id": 1,
"author": "Stephen Hawking",
"quote": "Utvecklingen av fullstÀndig artificiell intelligens kan " +
"stÀlla till med slutet för den mÀnskliga rasen⊠" +
"Den skulle ta fart av sig sjÀlv och omdesigna " +
"sig sjÀlv i en stÀndigt ökande takt. " +
"MÀnniskor, som Àr begrÀnsade av lÄngsam biologisk evolution, " +
"kan inte konkurrera och skulle bli översprungna."
},
{
"id": 2,
"author": "Claude Shannon",
"quote": "Jag förestÀller mig en tid nÀr vi kommer att vara för robotar vad " +
"hundar Àr för mÀnniskor, " +
"och jag hejar pÄ maskinerna."
},
{
"id": 3,
"author": "Elon Musk",
"quote": "Takten pÄ framsteg inom artificiell intelligens " +
"(jag syftar inte pÄ smal AI) " +
"Ă€r otroligt snabb. Om du inte har direkt " +
"exponering för grupper som Deepmind, " +
"har du ingen aning om hur snabbt â det vĂ€xer " +
"i en takt nÀra exponentiell. " +
"Risken för att nÄgot verkligen farligt " +
"kan hÀnda ligger inom en femÄrsperiod." +
"10 Är som mest."
},
{
"id": 4,
"author": "Geoffrey Hinton",
"quote": "Jag har alltid varit övertygad om att det enda sÀttet " +
"att fÄ artificiell intelligens att fungera " +
"Àr att göra berÀkningarna pÄ ett sÀtt som liknar den mÀnskliga hjÀrnan. " +
"Det Àr det mÄl jag har strÀvat efter. Vi gör framsteg, " +
"Àven om vi fortfarande har mycket att lÀra om " +
"hur hjÀrnan faktiskt fungerar."
},
{
"id": 5,
"author": "Pedro Domingos",
"quote": "Folk oroar sig för att datorer kommer att " +
"bli för smarta och ta över vÀrlden, " +
"men det verkliga problemet Àr att de Àr för dumma " +
"och de har redan tagit över vÀrlden."
},
{
"id": 6,
"author": "Alan Turing",
"quote": "Det verkar troligt att nÀr den maskinella tÀnkande " +
"metoden har startat, skulle det inte ta lÄng tid " +
"att övertrÀffa vÄra svaga krafter⊠" +
"De skulle kunna samtala " +
"med varandra för att skÀrpa sina förmÄgor. " +
"DÀrför bör vi vid nÄgon punkt " +
"förvÀnta oss att maskinerna tar kontroll."
},
{
"id": 7,
"author": "Ray Kurzweil",
"quote": "Artificiell intelligens kommer att nÄ " +
"mÀnskliga nivÄer omkring 2029. " +
"Följ vidare till, sÀg, 2045, " +
"vi kommer att ha multiplicerat intelligensen, " +
"den mÀnskliga biologiska maskinintelligensen " +
"i vÄr civilisation en miljardfalt."
},
{
"id": 8,
"author": "Sebastian Thrun",
"quote": "Ingen uttrycker det pÄ det hÀr sÀttet, men jag tycker " +
"att artificiell intelligens " +
"nÀstan Àr en humanistisk disciplin. Det Àr verkligen ett försök " +
"att förstÄ mÀnsklig intelligens och mÀnsklig kognition."
},
{
"id": 9,
"author": "Andrew Ng",
"quote": "Vi gör denna analogi att AI Àr den nya elektriciteten." +
"El elektricitet förÀndrade industrier: jordbruk, " +
"transport, kommunikation, tillverkning."
}
]Nu mÄste vi skapa en resursklass Quote som kommer att definiera operationerna för vÄra API-endpunkter. Inuti klassen behöver vi deklarera fyra metoder: get, post, put, delete.
Vi börjar med GET-metoden
Den ger möjlighet att hÀmta en specifik citat genom att ange dess ID eller en slumpmÀssig citat om inget ID anges.
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 "Citatet finns inte", 404GET-metoden returnerar en slumpmÀssig citat om ID har standardvÀrdet, det vill sÀga om ingen ID anges nÀr metoden kallas.
Om det anges, söker metoden bland citaten och hittar den som har det angivna ID:t. Om inget hittas visas meddelandet âCitatet finns inte, 404â.
Kom ihÄg: metoden returnerar HTTP-status 200 vid ett lyckat anrop och 404 om posten inte hittas.
Nu lÄt oss skapa en POST-metod för att lÀgga till ett nytt citat i arkivet
Den kommer att ta emot ID för varje nytt citat vid inmatning. Dessutom kommer POST att anvÀnda reqparse för att analysera parameterarna som skickas i begÀran (författare och citattext).
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} finns redan", 400
quote = {
"id": int(id),
"author": params["author"],
"quote": params["quote"]
}
ai_quotes.append(quote)
return quote, 201I koden ovan tog POST-metoden emot citatets ID. Sedan, med hjÀlp av reqparse, hÀmtade den författaren och citatet frÄn begÀran och sparade dem i ordlistan params.
Om ett citat med det angivna ID:t redan finns, visar metoden ett motsvarande meddelande och kod 400.
Om ett citat med det angivna ID:t Ànnu inte har skapats, skapar metoden en ny post med det angivna ID:t och författaren samt andra parametrar. Sedan lÀgger den till posten i listan ai_quotes och returnerar posten med det nya citatet tillsammans med kod 201.
Nu skapar vi en PUT-metod för att Àndra ett befintligt 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, likt det föregÄende exemplet, tar ID och input och parserar citatparametrarna med hjÀlp av reqparse.
Om citatet med det angivna ID:t finns, uppdaterar metoden det med de nya parametrarna och returnerar sedan det uppdaterade citatet med kod 200. Om citatet med den angivna ID:t Ànnu inte finns, skapas en ny post med kod 201.
Slutligen, lÄt oss skapa en DELETE-metod för att ta bort ett citat som inte lÀngre inspirerar.
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} Àr raderat.", 200Denna metod tar emot ID:t för citatet vid inmatningen och uppdaterar listan ai_quotes med hjÀlp av den globala listan.
Nu nÀr vi har skapat alla metoder, Àr allt vi behöver göra att bara lÀgga till resursen i API:et, ange sökvÀgen och köra Flask.
api.add_resource(Quote, "\/ai-quotes", "\/ai-quotes\/", "\/ai-quotes\/<int:id>")
if __name__ == '__main__':
app.run(debug=True)VÄr REST API-tjÀnst Àr klar!
DÀrefter kan vi spara koden i en fil app.py och köra den i konsolen med kommandot:
python3 app.pyOm allt gÄr bra, fÄr vi nÄgot som ser ut sÄ hÀr:
* Debug-lÀge: pÄ
* Kör pÄ :5000\/ (Tryck CTRL+C för att avsluta)
* Startar om med stat
* Felsökaren Àr aktiv!
* Felsöknings-PIN: XXXXXXX
Testar API:t
Efter att API:t har skapats mÄste det testas.
Detta kan göras med hjÀlp av kommandoradsverktyget curl eller Insomnia REST-klienten, eller genom att publicera API:t pÄ Rapid API.

Publicerar vÄrt API
RapidAPI Àr den största marknadsplatsen för API:er i vÀrlden med över 10 000 API:er (och cirka 1 miljon utvecklare).
RapidAPI inte bara erbjuder ett enhetligt grÀnssnitt för att arbeta med externa API:er, utan ger ocksÄ möjlighet att snabbt och enkelt publicera ditt eget API.
För att , mÄste vi först publicera det pÄ en server i nÀtverket. I vÄrt fall anvÀnder vi . Att arbeta med det bör inte vara nÄgot problem, ().
Hur man publicerar ditt API pÄ Heroku
1. Installera Heroku.
Först behöver du registrera dig och installera Heroku Command Line Interface (CLI). Det fungerar pÄ Ubuntu 16+.
sudo snap install heroku âclassic
Sedan loggar vi in:
heroku login
2. LÀgga till nödvÀndiga filer.
Nu mÄste vi lÀgga till filerna för publicering i mappen i vÄr applikation:
- requirements.txt med en lista över nödvÀndiga Python-moduler;
- Procfile som anger vilka kommandon som ska köras för att starta applikationen;
- .gitignore â för att exkludera filer som inte behövs pĂ„ servern.
Filen requirements.txt kommer att innehÄlla följande rader:
- flask
- flask-restful
- gunicorn
Observera: Vi har lagt till gunicorn (Python WSGI HTTP Server) i listan eftersom vi behöver köra vÄr applikation pÄ servern.
Procfile kommer att innehÄlla:
web: gunicorn app:app
InnehÄllet i .gitignore:
*.pyc
__pycache__/Nu nÀr filerna har skapats, lÄt oss initiera git-repo och göra en commit:
git init
git add
git commit -m "Första API-commit"3. Skapa en ny Heroku-app.
heroku createSkicka master branch till den externa Heroku-repo:
git push heroku masterNu kan vi börja med att öppna API-tjÀnsten med hjÀlp av kommandon:
heroku ps:scale web=1
heroku open
API kommer att vara tillgÀngligt pÄ adressen .
Hur man lÀgger till ditt Python API i RapidAPI-marknaden
NÀr API-tjÀnsten har publicerats pÄ Heroku kan den lÀggas till i RapidAPI. HÀr om detta Àmne.
1. Skapa ett RapidAPI-konto.
![]()
Registrera ett gratis konto â detta kan göras med Facebook, Google, GitHub.

2. LĂ€gg till API i kontrollpanelen.

3. Ange allmÀn information om ditt API.

4. Efter att ha tryckt pÄ "LÀgg till API" kommer en ny sida upp dÀr du kan ange information om vÄrt API.

5. Nu kan du antingen manuellt ange API-endpoints, eller ladda upp med hjÀlp av OpenAPI.

Nu behöver vi stÀlla in endpoints för vÄrt API pÄ sidan Endpoints. I vÄrt fall överensstÀmmer endpoints med CRUD-konceptet (get, post, put, delete).

Sedan behöver vi skapa en GET AI Quote-endpoint som returnerar ett slumpmÀssigt citat (om ID Àr standard) eller ett citat för angivet ID.
För att skapa en endpoint mÄste du trycka pÄ knappen "Skapa Endpoint".

Upprepa denna process för alla andra API-endpoints. Det Àr allt! Grattis, du har publicerat ditt API!
Om allt Àr bra, kommer API-sidan att se ut som följande:

Slutsats
I denna artikel har vi utforskat processen att skapa en egen RESTful API-tjÀnst pÄ Python, tillsammans med processen att publicera API:t pÄ molnet Heroku och lÀgga till det i katalogen RapidAPI.
Men i testversionen visades bara de grundlĂ€ggande principerna för API-utveckling â detaljer som sĂ€kerhet, redundans och skalbarhet behandlades inte.
Vid utvecklingen av ett verkligt API behöver allt detta beaktas.
KĂ€lla: habr.com
