ãã®èšäºãèªãã§ããæ¹ã¯ãAPI (ã¢ããªã±ãŒã·ã§ã³ ããã°ã©ãã³ã° ã€ã³ã¿ãŒãã§ã€ã¹) ã䜿çšããããšã§å¯èœã«ãªãå¯èœæ§ã«ã€ããŠã¯ãã§ã«ãåãããšæããŸãã
å€æ°ã®ãããªã㯠API ã® XNUMX ã€ãã¢ããªã±ãŒã·ã§ã³ã«è¿œå ããããšã§ããã®ã¢ããªã±ãŒã·ã§ã³ã®æ©èœãæ¡åŒµããããå¿
èŠãªããŒã¿ãè¿œå ãããã§ããŸãã ããããã³ãã¥ããã£ãšå
±æãããç¬èªã®æ©èœãéçºããå Žåã¯ã©ããªãã§ãããã?
çãã¯ç°¡åã§ãã
ããã¯æåã¯å°é£ãªäœæ¥ã®ããã«æãããããããŸããããå®éã«ã¯éåžžã«ç°¡åã§ãã Python ã§ãããè¡ãæ¹æ³ã説æããŸãã
å§ããããã«å¿ èŠãªãã®
API éçºã«ã¯ä»¥äžãå¿ èŠã§ãã
- Python3;
ãã©ã¹ã³ â Web ã¢ããªã±ãŒã·ã§ã³ãäœæããããã®ã·ã³ãã«ã§äœ¿ãããããã¬ãŒã ã¯ãŒã¯ãFlask-RESTful ã¯ãæå°éã®æ§æ㧠REST API ãè¿ éã«éçºã§ããããã«ãã Flask ã®æ¡åŒµæ©èœã§ãã
ã€ã³ã¹ããŒã«ã¯æ¬¡ã®ã³ãã³ãã§å®è¡ããŸãã
pip install flask-restful
åå¿è ã«ã¯ç¡æã®éäžããã°ã©ãã³ã°ããå§ãããŸãã
C# ã§ã® Telegram ãããéçº â 26æ28æ¥ããXNUMXæ¥ãŸã§ã ãã«ã㌠ãããã®ä»çµã¿ãTelegram API ã®æäœæ©èœããã®ä»ã®ãã¥ã¢ã³ã¹ãç解ã§ããç¡æã®éäžè¬åº§ã§ãã äžäœ 30 人ã®åå è ã«ã¯ã¹ãã«ããã¯ã¹ãã 000 ã«ãŒãã«ãèŽãããŸã.
å§ããåã«
åºæ¬ç㪠RESTful API ãéçºããŸãã
ãã®ã¿ã¹ã¯ãå®å šã«ç解ããã«ã¯ãäžèšã® XNUMX ã€ã®çšèªãç解ããŸãããã
ã¬ã¹ããšã¯äœã§ãã?
REST API (Representational State Transfer) ã¯ãHTTP ãªã¯ãšã¹ãã䜿çšããŠããŒã¿ã亀æãã API ã§ãã
REST API ã¯ç¹å®ã®åºæºãæºããå¿ èŠããããŸãã
- ã¯ã©ã€ã¢ã³ã/ãµãŒã㌠ã¢ãŒããã¯ãã£: ã¯ã©ã€ã¢ã³ãã¯ãŠãŒã¶ãŒ ã€ã³ã¿ãŒãã§ã€ã¹ãšå¯Ÿè©±ãããµãŒããŒã¯ããã¯ãšã³ãããã³ããŒã¿ ã¹ãã¢ãšå¯Ÿè©±ããŸãã ã¯ã©ã€ã¢ã³ããšãµãŒããŒã¯ç¬ç«ããŠããããããããä»æ¹ãšã¯åå¥ã«çœ®ãæããããšãã§ããŸãã
- ã¹ããŒãã¬ã¹ - ã¯ã©ã€ã¢ã³ã ããŒã¿ã¯ãµãŒããŒã«ä¿åãããŸããã ã»ãã·ã§ã³ç¶æ ã¯ã¯ã©ã€ã¢ã³ãåŽã«ä¿åãããŸãã
- ãã£ãã·ã¥å¯èœæ§ - ã¯ã©ã€ã¢ã³ãã¯ãµãŒããŒã®å¿çããã£ãã·ã¥ããŠãå šäœçãªããã©ãŒãã³ã¹ãåäžãããããšãã§ããŸãã
CRUDãšã¯äœã§ãã?
æ®é · ã¯ãXNUMX ã€ã®åºæ¬çãªã¢ã¯ã·ã§ã³ (äœæãèªã¿åããæŽæ°ãåé€) ã説æããããã°ã©ãã³ã°ã®æŠå¿µã§ãã
REST API ã§ã¯ããªã¯ãšã¹ã ã¿ã€ããšãªã¯ãšã¹ã ã¡ãœããããpostãgetãputãdelete ãªã©ã®ã¢ã¯ã·ã§ã³ãæ åœããŸãã
åºæ¬çãªçšèªãç解ããã®ã§ãAPI ã®äœæãéå§ã§ããŸãã
éçº
人工ç¥èœã«é¢ããåèšã®ãªããžããªãäœæããŸãããã AI ã¯ä»æ¥æãæ¥éã«æé·ããŠãããã¯ãããžãŒã® XNUMX ã€ã§ãããPython 㯠AI ãæäœããããã®äººæ°ã®ããããŒã«ã§ãã
ãã® API ã䜿çšãããšãPython éçºè 㯠AI ã«ã€ããŠããã«åŠã³ãæ°ããææããã€ã³ã¹ãã¬ãŒã·ã§ã³ãåããããšãã§ããŸãã éçºè ããã®ãããã¯ã«é¢ããŠè²ŽéãªæèŠãããå Žåã¯ãããããªããžããªã«è¿œå ã§ããŸãã
å¿ èŠãªã¢ãžã¥ãŒã«ãã€ã³ããŒãããFlask ãã»ããã¢ããããããšããå§ããŸãããã
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)
ãã®ã¹ããããã§ã¯ãFlaskãApiãããã³ Resource ãå¿ èŠãªã¯ã©ã¹ã§ãã
Reqparse 㯠Flask-RESTful ãªã¯ãšã¹ã解æã€ã³ã¿ãŒãã§ã€ã¹ã§ããã©ã³ãã ãªåŒçšç¬Šã衚瀺ããã«ã¯ãrandom ã¢ãžã¥ãŒã«ãå¿ èŠã§ãã
次ã«ãAI ã«é¢ããåŒçšã®ãªããžããªãäœæããŸãã
åãªããžã㪠ãšã³ããªã«ã¯æ¬¡ã®ãã®ãå«ãŸããŸãã
- ããžã¿ã«ID;
- åŒçšã®èè ã®ååã
- åŒçšã
ããã¯åãªãåŠç¿äŸã§ããããããã¹ãŠã®ãšã³ããªã Python ãªã¹ãã«ä¿åããŸãã å®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã代ããã«ããŒã¿ããŒã¹ã䜿çšããå¯èœæ§ãé«ããªããŸãã
ai_quotes = [
{
"id": 0,
"author": "Kevin Kelly",
"quote": "The business plans of the next 10,000 startups are easy to forecast: " +
"Take X and add AI."
},
{
"id": 1,
"author": "Stephen Hawking",
"quote": "The development of full artificial intelligence could " +
"spell the end of the human race⊠" +
"It would take off on its own, and re-design " +
"itself at an ever increasing rate. " +
"Humans, who are limited by slow biological evolution, " +
"couldn't compete, and would be superseded."
},
{
"id": 2,
"author": "Claude Shannon",
"quote": "I visualize a time when we will be to robots what " +
"dogs are to humans, " +
"and Iâm rooting for the machines."
},
{
"id": 3,
"author": "Elon Musk",
"quote": "The pace of progress in artificial intelligence " +
"(Iâm not referring to narrow AI) " +
"is incredibly fast. Unless you have direct " +
"exposure to groups like Deepmind, " +
"you have no idea how fast â it is growing " +
"at a pace close to exponential. " +
"The risk of something seriously dangerous " +
"happening is in the five-year timeframe." +
"10 years at most."
},
{
"id": 4,
"author": "Geoffrey Hinton",
"quote": "I have always been convinced that the only way " +
"to get artificial intelligence to work " +
"is to do the computation in a way similar to the human brain. " +
"That is the goal I have been pursuing. We are making progress, " +
"though we still have lots to learn about " +
"how the brain actually works."
},
{
"id": 5,
"author": "Pedro Domingos",
"quote": "People worry that computers will " +
"get too smart and take over the world, " +
"but the real problem is that they're too stupid " +
"and they've already taken over the world."
},
{
"id": 6,
"author": "Alan Turing",
"quote": "It seems probable that once the machine thinking " +
"method had started, it would not take long " +
"to outstrip our feeble powers⊠" +
"They would be able to converse " +
"with each other to sharpen their wits. " +
"At some stage therefore, we should " +
"have to expect the machines to take control."
},
{
"id": 7,
"author": "Ray Kurzweil",
"quote": "Artificial intelligence will reach " +
"human levels by around 2029. " +
"Follow that out further to, say, 2045, " +
"we will have multiplied the intelligence, " +
"the human biological machine intelligence " +
"of our civilization a billion-fold."
},
{
"id": 8,
"author": "Sebastian Thrun",
"quote": "Nobody phrases it this way, but I think " +
"that artificial intelligence " +
"is almost a humanities discipline. It's really an attempt " +
"to understand human intelligence and human cognition."
},
{
"id": 9,
"author": "Andrew Ng",
"quote": "We're making this analogy that AI is the new electricity." +
"Electricity transformed industries: agriculture, " +
"transportation, communication, manufacturing."
}
]
次ã«ãAPI ãšã³ããã€ã³ãã®æäœãå®çŸ©ãã Quote ãªãœãŒã¹ ã¯ã©ã¹ãäœæããå¿ èŠããããŸãã getãpostãputãdelete ã® XNUMX ã€ã®ã¡ãœãããã¯ã©ã¹å ã§å®£èšããå¿ èŠããããŸãã
GET ã¡ãœããããå§ããŸããã
ID ãæå®ããŠç¹å®ã®èŠç©ãããååŸããããID ãæå®ãããŠããªãå Žåã¯ã©ã³ãã ãªèŠç©ãããååŸã§ããŸãã
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 "Quote not found", 404
ID ã«ããã©ã«ãå€ãå«ãŸããŠããå ŽåãGET ã¡ãœããã¯ã©ã³ãã ãªåŒçšç¬Šãè¿ããŸãã åŒã³åºãæã«ã¡ãœããIDãèšå®ãããŠããŸããã§ããã
ãããèšå®ãããŠããå Žåãã¡ãœããã¯åŒçšç¬Šå ãæ€çŽ¢ããæå®ããã ID ãå«ãåŒçšç¬ŠãèŠã€ããŸãã äœãèŠã€ãããªãå Žåã¯ããQuote not found, 404ããšããã¡ãã»ãŒãžã衚瀺ãããŸãã
ãã®ã¡ãœããã¯ããªã¯ãšã¹ããæåããå Žå㯠HTTP ã¹ããŒã¿ã¹ 200 ãè¿ãããšã³ããªãèŠã€ãããªãã£ãå Žå㯠404 ãè¿ããŸãã
次ã«ãæ°ããåŒçšããªããžããªã«è¿œå ãã POST ã¡ãœãããäœæããŸãããã
å ¥åãããšãæ°ããåŒçšç¬Šã® ID ãååŸãããŸãã ããã«ãPOST 㯠reqparse ã䜿çšããŠããªã¯ãšã¹ãæ¬æ (äœæè ããã³åŒçšããã¹ã) ã«å«ãŸãããã©ã¡ãŒã¿ãŒã解æããŸãã
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"Quote with id {id} already exists", 400
quote = {
"id": int(id),
"author": params["author"],
"quote": params["quote"]
}
ai_quotes.append(quote)
return quote, 201
äžèšã®ã³ãŒãã§ã¯ãPOST ã¡ãœããã¯èŠç© ID ãåãå ¥ããŸããã 次ã«ãreqparse ã䜿çšããŠããªã¯ãšã¹ãããäœæè ãšåŒçšãååŸãããããã params ãã£ã¯ã·ã§ããªã«ä¿åããŸãã
æå®ããã ID ãæã€åŒçšããã§ã«ååšããå Žåãã¡ãœããã¯é©åãªã¡ãã»ãŒãžãšã³ãŒã 400 ã衚瀺ããŸãã
æå®ããã ID ãæã€åŒçšããŸã äœæãããŠããªãå Žåãã¡ãœããã¯æå®ããã ID ãšäœæè ãããã³ãã®ä»ã®ãã©ã¡ãŒã¿ãŒã䜿çšããŠæ°ãããšã³ããªãäœæããŸãã 次ã«ãai_quotes ãªã¹ãã«ãšã³ããªãè¿œå ãã201 ã³ãŒããšãšãã«æ°ããåŒçšç¬Šãå«ããšã³ããªãè¿ããŸãã
次ã«ããªããžããªå ã®æ¢åã®èŠç©ãããå€æŽããããã® PUT ã¡ãœãããäœæããŸãã
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, 201
PUT ã¡ãœããã¯ãåã®äŸãšåæ§ã«ãID ãšå ¥åãåãåããreqparse ã䜿çšããŠåŒçšãã©ã¡ãŒã¿ãŒã解æããŸãã
æå®ããã ID ãæã€èŠç©ãååšããå Žåãã¡ãœããã¯æ°ãããã©ã¡ãŒã¿ãŒã§ãããæŽæ°ããæŽæ°ãããèŠç©ãã³ãŒã 200 ã§åºåããŸããæå®ããã ID ãæã€èŠç©ããŸã ãªãå Žåã¯ãã³ãŒã 201 ãæã€æ°ããã¬ã³ãŒããäœæãããŸãã
æåŸã«ãæåãäžããªããªã£ãåŒçšãåé€ãã DELETE ã¡ãœãããäœæããŸãããã
def delete(self, id):
global ai_quotes
ai_quotes = [qoute for qoute in ai_quotes if qoute["id"] != id]
return f"Quote with id {id} is deleted.", 200
ãã®ã¡ãœããã¯ãåŒçšã® ID ãå ¥åãšããŠåãåããå ±æãªã¹ãã䜿çšã㊠ai_quotes ã®ãªã¹ããæŽæ°ããŸãã
ãã¹ãŠã®ã¡ãœãããäœæããã®ã§ãããšã¯ãªãœãŒã¹ã API ã«è¿œå ãããã¹ãèšå®ããFlask ãå®è¡ããã ãã§ãã
api.add_resource(Quote, "/ai-quotes", "/ai-quotes/", "/ai-quotes/<int:id>")
if __name__ == '__main__':
app.run(debug=True)
REST API ãµãŒãã¹ã®æºåãæŽããŸããã
次ã«ãã³ã³ãœãŒã«ã§æ¬¡ã®ã³ãã³ããå®è¡ããŠãã³ãŒãã app.py ãã¡ã€ã«ã«ä¿åã§ããŸãã
python3 app.py
ãã¹ãŠãæ£åžžã§ããã°ã次ã®ãããªçµæãåŸãããŸãã
* ãããã°ã¢ãŒã: ãªã³
* å®è¡äž
*ã¹ããŒã¿ã¹ãååŸããŠåèµ·åããŸã
* ãããã¬ã¯ã¢ã¯ãã£ãã§ã!
* ããã㬠PIN: XXXXXXX
API ã®ãã¹ã
API ãäœæãããããã¹ãããå¿ èŠããããŸãã
ããã¯ãcurl ã³ã³ãœãŒã« ãŠãŒãã£ãªãã£ãŸã㯠Insomnia REST ã¯ã©ã€ã¢ã³ãã䜿çšããããRapid API 㧠API ãå ¬éããããšã«ãã£ãŠå®è¡ã§ããŸãã
API ãå
¬éãã
RapidAPI ã¯ã10 ãè¶ ãã API (ããã³çŽ 000 äžäººã®éçºè ) ãæããäžçæ倧ã®ããŒã±ãããã¬ã€ã¹ã§ãã
RapidAPI ã¯ããµãŒãããŒã㣠API ãæäœããããã®åäžã®ã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããã ãã§ãªããç¬èªã® API ãè¿ éãã€ç°¡åã«å ¬éããããšãã§ããŸãã
ãž
Heroku 㧠API ãå ¬éããæ¹æ³
1. Heroku ãã€ã³ã¹ããŒã«ããŸãã
æåã®ã¹ãããã¯ãHeraku ã³ãã³ãã©ã€ã³ ã€ã³ã¿ãŒãã§ã€ã¹ (CLI) ãç»é²ããŠã€ã³ã¹ããŒã«ããããšã§ãã ãã㯠Ubuntu 16 以éã§åäœããŸãã
sudo snap install heroku --classic
次ã«ããã°ã€ã³ããŸãã
Herokuãã°ã€ã³
2. å¿ èŠãªãã¡ã€ã«ãè¿œå ããŸãã
ããã§ãå ¬éãããã¡ã€ã«ãã¢ããªã±ãŒã·ã§ã³å ã®ãã©ã«ããŒã«è¿œå ããå¿ èŠããããŸãã
- requirements.txt ã«ã¯ãå¿ èŠãª Python ã¢ãžã¥ãŒã«ã®ãªã¹ããå«ãŸããŠããŸãã
- Procfile: ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããããã«å®è¡ããå¿ èŠãããã³ãã³ããæå®ããŸãã
- .gitignore - ãµãŒããŒäžã§äžèŠãªãã¡ã€ã«ãé€å€ããŸãã
requirements.txt ãã¡ã€ã«ã«ã¯æ¬¡ã®è¡ãå«ãŸããŸãã
- ãã©ã¹ã³
- ãã©ã¹ã³ã®äŒæ¯
- ã¬ã³ã³ãŒã³
ã¢ããªã±ãŒã·ã§ã³ããµãŒããŒäžã§å®è¡ããå¿ èŠããããããgunicorn (Python WSGI HTTP Server) ããªã¹ãã«è¿œå ããããšã«æ³šæããŠãã ããã
Procfile ã«ã¯ä»¥äžãå«ãŸããŸã:
ãŠã§ãïŒgunicorn appïŒapp
.gitignore ã®å 容:
*.pyc
__pycache__/
ãã¡ã€ã«ãäœæãããã®ã§ãgit ãªããžããªãåæåããŠã³ãããããŸãããã
git init
git add
git commit -m "First API commit"
3. æ°ãã Heroku ã¢ããªãäœæããŸãã
heroku create
master ãã©ã³ãããªã¢ãŒã Heroku ãªããžããªã«ããã·ã¥ããŸãã
git push heroku master
ããã§ã次ã®ã³ãã³ãã䜿çšã㊠API ãµãŒãã¹ãéãããšããå§ããããšãã§ããŸãã
heroku ps:scale web=1
heroku open
API ã¯æ¬¡ã®å Žæã§å©çšå¯èœã«ãªããŸãã
Python API ã RapidAPI ããŒã±ãããã¬ã€ã¹ã«è¿œå ããæ¹æ³
API ãµãŒãã¹ã Heroku ã§å
¬éãããããããã Rapid API ã«è¿œå ã§ããŸãã ãã
1. RapidAPI ã¢ã«ãŠã³ããäœæããŸãã
ç¡æã®ã¢ã«ãŠã³ããç»é²ããŸãããã㯠FacebookãGoogleãGitHub ã䜿çšããŠè¡ãããšãã§ããŸãã
2. ã³ã³ãããŒã«ããã«ã«APIãè¿œå ããŸãã
3. 次ã«ãAPI ã«é¢ããäžè¬æ
å ±ãå
¥åããŸãã
4. [API ãè¿œå ] ãã¯ãªãã¯ãããšãæ°ããããŒãžã衚瀺ãããAPI ã«é¢ããæ
å ±ãå
¥åã§ããŸãã
5. ããã§ãAPI ãšã³ããã€ã³ããæåã§å
¥åããããããŠã³ããŒãã§ããŸãã
ããŠãããã§ãããšã³ããã€ã³ããããŒãžã§ API ã®ãšã³ããã€ã³ããèšå®ããå¿
èŠããããŸãã ãã®å Žåããšã³ããã€ã³ã㯠CRUD (ååŸãæçš¿ãé
眮ãåé€) ã®æŠå¿µã«å¯Ÿå¿ããŸãã
次ã«ãã©ã³ãã ãªèŠç©ãã (ID ãããã©ã«ãã®å Žå) ãŸãã¯æå®ããã ID ã®èŠç©ããã衚瀺ãã GET AI Quote ãšã³ããã€ã³ããäœæããå¿
èŠããããŸãã
ãšã³ããã€ã³ããäœæããã«ã¯ãããšã³ããã€ã³ãã®äœæããã¿ã³ãã¯ãªãã¯ããå¿ èŠããããŸãã
ä»ã®ãã¹ãŠã® API ãšã³ããã€ã³ãã«å¯ŸããŠãã®ããã»ã¹ãç¹°ãè¿ããŸãã ããã§å
šéšã§ãïŒ ããã§ãšãããããŸããAPI ãå
¬éãããŸããã
ãã¹ãŠãããŸãããã°ãAPI ããŒãžã¯æ¬¡ã®ããã«ãªããŸãã
ãŸãšã
ãã®èšäºã§ã¯ãPython ã§ç¬èªã® RESTful API ãµãŒãã¹ãäœæããããã»ã¹ãšãAPI ã Heroku ã¯ã©ãŠãã«å ¬éã㊠RapidAPI ãã£ã¬ã¯ããªã«è¿œå ããããã»ã¹ã«ã€ããŠèª¬æããŸããã
ãããããã¹ã ããŒãžã§ã³ã§ã¯ãAPI éçºã®åºæ¬ååã®ã¿ã瀺ãããŠãããã»ãã¥ãªãã£ããã©ãŒã«ã ãã¬ã©ã³ã¹ãã¹ã±ãŒã©ããªãã£ãªã©ã®ãã¥ã¢ã³ã¹ã¯èæ ®ãããŠããŸããã§ããã
å®éã® API ãéçºãããšãã¯ãããããã¹ãŠãèæ
®ããå¿
èŠããããŸãã
åºæïŒ habr.com