当前位置:首页 » 云服务器 » api服务器搭建api

api服务器搭建api

发布时间: 2023-01-31 12:37:26

㈠ 如何使用python 开发一个api

使用 Python 和 Flask 设计 RESTful API

近些年来 REST (REpresentational State Transfer) 已经变成了 web services 和 web APIs 的标配。

在本文中我将向你展示如何简单地使用 Python 和 Flask 框架来创建一个 RESTful 的 web service。

什么是 REST?

六条设计规范定义了一个 REST 系统的特点:

  • 客户端-服务器: 客户端和服务器之间隔离,服务器提供服务,客户端进行消费。

  • 无状态: 从客户端到服务器的每个请求都必须包含理解请求所必需的信息。换句话说, 服务器不会存储客户端上一次请求的信息用来给下一次使用。

  • 缓存: 服务器必须明示客户端请求能否缓存。

  • 分层系统: 客户端和服务器之间的通信应该以一种标准的方式,就是中间层代替服务器做出响应的时候,客户端不需要做任何变动。

  • 统一的接口: 服务器和客户端的通信方法必须是统一的。

  • 按需编码: 服务器可以提供可执行代码或脚本,为客户端在它们的环境中执行。这个约束是唯一一个是可选的。

  • 什么是一个 RESTful 的 web service?

    REST 架构的最初目的是适应万维网的 HTTP 协议。

    RESTful web services 概念的核心就是“资源”。 资源可以用URI来表示。客户端使用 HTTP 协议定义的方法来发送请求到这些 URIs,当然可能会导致这些被访问的”资源“状态的改变。

    HTTP 标准的方法有如下:

  • ========== ===================== ==================================

  • HTTP 方法 行为 示例

  • ========== ===================== ==================================

  • GET 获取资源的信息 http://example.com/api/orders

  • GET 获取某个特定资源的信息 http://example.com/api/orders/123

  • POST 创建新资源 http://example.com/api/orders

  • PUT 更新资源 http://example.com/api/orders/123

  • DELETE 删除资源 http://example.com/api/orders/123

  • ========== ====================== ==================================

  • REST 设计不需要特定的数据格式。在请求中数据可以以JSON形式, 或者有时候作为 url 中查询参数项。

    设计一个简单的 web service

    坚持 REST 的准则设计一个 web service 或者 API 的任务就变成一个标识资源被展示出来以及它们是怎样受不同的请求方法影响的练习。

    比如说,我们要编写一个待办事项应用程序而且我们想要为它设计一个 web service。要做的第一件事情就是决定用什么样的根 URL 来访问该服务。例如,我们可以通过这个来访问:

    http://[hostname]/todo/api/v1.0/

    在这里我已经决定在 URL 中包含应用的名称以及 API 的版本号。在 URL 中包含应用名称有助于提供一个命名空间以便区分同一系统上的其它服务。在 URL 中包含版本号能够帮助以后的更新,如果新版本中存在新的和潜在不兼容的功能,可以不影响依赖于较旧的功能的应用程序。

    下一步骤就是选择将由该服务暴露(展示)的资源。这是一个十分简单地应用,我们只有任务,因此在我们待办事项中唯一的资源就是任务。

    我们的任务资源将要使用 HTTP 方法如下:

  • ========== =============================================== =============================

  • HTTP 方法 URL 动作

  • ========== =============================================== ==============================

  • GET http://[hostname]/todo/api/v1.0/tasks 检索任务列表

  • GET http://[hostname]/todo/api/v1.0/tasks/[task_id] 检索某个任务

  • POST http://[hostname]/todo/api/v1.0/tasks 创建新任务

  • PUT http://[hostname]/todo/api/v1.0/tasks/[task_id] 更新任务

  • DELETE http://[hostname]/todo/api/v1.0/tasks/[task_id] 删除任务

  • ========== ================================================ =============================

  • 我们定义的任务有如下一些属性:

  • id: 任务的唯一标识符。数字类型。

  • title: 简短的任务描述。字符串类型。

  • description: 具体的任务描述。文本类型。

  • done: 任务完成的状态。布尔值。

  • 目前为止关于我们的 web service 的设计基本完成。剩下的事情就是实现它!

    Flask 框架的简介

    如果你读过Flask Mega-Tutorial 系列,就会知道 Flask 是一个简单却十分强大的 Python web 框架。

    在我们深入研究 web services 的细节之前,让我们回顾一下一个普通的 Flask Web 应用程序的结构。

    我会首先假设你知道 Python 在你的平台上工作的基本知识。 我将讲解的例子是工作在一个类 Unix 操作系统。简而言之,这意味着它们能工作在 linux,Mac OS X 和 Windows(如果你使用Cygwin)。 如果你使用 Windows 上原生的 Python 版本的话,命令会有所不同。

    让我们开始在一个虚拟环境上安装 Flask。如果你的系统上没有 virtualenv,你可以从https://pypi.python.org/pypi/virtualenv上下载:

  • $ mkdir todo-api

  • $ cd todo-api

  • $ virtualenv flask

  • New python executable in flask/bin/python

  • Installing setuptools............................done.

  • Installing pip...................done.

  • $ flask/bin/pip install flask

  • 既然已经安装了 Flask,现在开始创建一个简单地网页应用,我们把它放在一个叫 app.py 的文件中:

  • #!flask/bin/pythonfrom flask import Flaskapp = Flask(__name__)@app.route('/')def index():

  • return "Hello, World!"if __name__ == '__main__':

  • app.run(debug=True)

  • 为了运行这个程序我们必须执行 app.py:

  • $ chmod a+x app.py

  • $ ./app.py

  • * Running on http://127.0.0.1:5000/

  • * Restarting with reloader

  • 现在你可以启动你的网页浏览器,输入http://localhost:5000看看这个小应用程序的效果。

    简单吧?现在我们将这个应用程序转换成我们的 RESTful service!

    使用 Python 和 Flask 实现 RESTful services

    使用 Flask 构建 web services 是十分简单地,比我在Mega-Tutorial中构建的完整的服务端的应用程序要简单地多。

    在 Flask 中有许多扩展来帮助我们构建 RESTful services,但是在我看来这个任务十分简单,没有必要使用 Flask 扩展。

    我们 web service 的客户端需要添加、删除以及修改任务的服务,因此显然我们需要一种方式来存储任务。最直接的方式就是建立一个小型的数据库,但是数据库并不是本文的主体。学习在 Flask 中使用合适的数据库,我强烈建议阅读Mega-Tutorial。

    这里我们直接把任务列表存储在内存中,因此这些任务列表只会在 web 服务器运行中工作,在结束的时候就失效。 这种方式只是适用我们自己开发的 web 服务器,不适用于生产环境的 web 服务器, 这种情况一个合适的数据库的搭建是必须的。

    我们现在来实现 web service 的第一个入口:

  • #!flask/bin/pythonfrom flask import Flask, jsonifyapp = Flask(__name__)tasks = [

  • {

  • 'id': 1,

  • 'title': u'Buy groceries',

  • 'description': u'Milk, Cheese, Pizza, Fruit, Tylenol',

  • 'done': False

  • },

  • {

  • 'id': 2,

  • 'title': u'Learn Python',

  • 'description': u'Need to find a good Python tutorial on the web',

  • 'done': False

  • }]@app.route('/todo/api/v1.0/tasks', methods=['GET'])def get_tasks():

  • return jsonify({'tasks': tasks})if __name__ == '__main__':

  • app.run(debug=True)

  • 正如你所见,没有多大的变化。我们创建一个任务的内存数据库,这里无非就是一个字典和数组。数组中的每一个元素都具有上述定义的任务的属性。

    取代了首页,我们现在拥有一个 get_tasks 的函数,访问的 URI 为 /todo/api/v1.0/tasks,并且只允许 GET 的 HTTP 方法。

    这个函数的响应不是文本,我们使用 JSON 数据格式来响应,Flask 的 jsonify 函数从我们的数据结构中生成。

    使用网页浏览器来测试我们的 web service 不是一个最好的注意,因为网页浏览器上不能轻易地模拟所有的 HTTP 请求的方法。相反,我们会使用 curl。如果你还没有安装 curl 的话,请立即安装它。

    通过执行 app.py,启动 web service。接着打开一个新的控制台窗口,运行以下命令:

  • $ curl -i http://localhost:5000/todo/api/v1.0/tasks

  • HTTP/1.0 200 OK

  • Content-Type: application/json

  • Content-Length: 294

  • Server: Werkzeug/0.8.3 Python/2.7.3

  • Date: Mon, 20 May 2013 04:53:53 GMT


  • {

  • "tasks": [

  • {

  • "description": "Milk, Cheese, Pizza, Fruit, Tylenol",

  • "done": false,

  • "id": 1,

  • "title": "Buy groceries"

  • },

  • {

  • "description": "Need to find a good Python tutorial on the web",

  • "done": false,

  • "id": 2,

  • "title": "Learn Python"

  • }

  • ]

  • }

  • 我们已经成功地调用我们的 RESTful service 的一个函数!

    现在我们开始编写 GET 方法请求我们的任务资源的第二个版本。这是一个用来返回单独一个任务的函数:

  • from flask import [email protected]('/todo/api/v1.0/tasks/<int:task_id>', methods=['GET'])def get_task(task_id):

  • task = filter(lambda t: t['id'] == task_id, tasks)

  • if len(task) == 0:

  • abort(404)

  • return jsonify({'task': task[0]})

  • 第二个函数有些意思。这里我们得到了 URL 中任务的 id,接着 Flask 把它转换成 函数中的 task_id 的参数。

    我们用这个参数来搜索我们的任务数组。如果我们的数据库中不存在搜索的 id,我们将会返回一个类似 404 的错误,根据 HTTP 规范的意思是 “资源未找到”。

    如果我们找到相应的任务,那么我们只需将它用 jsonify 打包成 JSON 格式并将其发送作为响应,就像我们以前那样处理整个任务集合。

    调用 curl 请求的结果如下:

  • $ curl -i http://localhost:5000/todo/api/v1.0/tasks/2

  • HTTP/1.0 200 OK

  • Content-Type: application/json

  • Content-Length: 151

  • Server: Werkzeug/0.8.3 Python/2.7.3

  • Date: Mon, 20 May 2013 05:21:50 GMT


  • {

  • "task": {

  • "description": "Need to find a good Python tutorial on the web",

  • "done": false,

  • "id": 2,

  • "title": "Learn Python"

  • }

  • }

  • $ curl -i http://localhost:5000/todo/api/v1.0/tasks/3

  • HTTP/1.0 404 NOT FOUND

  • Content-Type: text/html

  • Content-Length: 238

  • Server: Werkzeug/0.8.3 Python/2.7.3

  • Date: Mon, 20 May 2013 05:21:52 GMT


  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">

  • <title>404 Not Found</title>

  • <h1>Not Found</h1>

  • <p>The requested URL was not found on the server.</p><p>If you entered the URL manually please check your spelling and try again.</p>

  • 当我们请求 id #2 的资源时候,我们获取到了,但是当我们请求 #3 的时候返回了 404 错误。有关错误奇怪的是返回的是 HTML 信息而不是 JSON,这是因为 Flask 按照默认方式生成 404 响应。由于这是一个 Web service 客户端希望我们总是以 JSON 格式回应,所以我们需要改善我们的 404 错误处理程序:

  • from flask import [email protected](404)def not_found(error):

  • return make_response(jsonify({'error': 'Not found'}), 404)

  • 我们会得到一个友好的错误提示:

  • $ curl -i http://localhost:5000/todo/api/v1.0/tasks/3

  • HTTP/1.0 404 NOT FOUND

  • Content-Type: application/json

  • Content-Length: 26

  • Server: Werkzeug/0.8.3 Python/2.7.3

  • Date: Mon, 20 May 2013 05:36:54 GMT


  • {

  • "error": "Not found"

  • }

  • 接下来就是 POST 方法,我们用来在我们的任务数据库中插入一个新的任务:

  • from flask import [email protected]('/todo/api/v1.0/tasks', methods=['POST'])def create_task():

  • if not request.json or not 'title' in request.json:

  • abort(400)

  • task = {

  • 'id': tasks[-1]['id'] + 1,

  • 'title': request.json['title'],

  • 'description': request.json.get('description', ""),

  • 'done': False

  • }

  • tasks.append(task)

  • return jsonify({'task': task}), 201

  • 添加一个新的任务也是相当容易地。只有当请求以 JSON 格式形式,request.json 才会有请求的数据。如果没有数据,或者存在数据但是缺少 title 项,我们将会返回 400,这是表示请求无效。

    接着我们会创建一个新的任务字典,使用最后一个任务的 id + 1 作为该任务的 id。我们允许 description 字段缺失,并且假设 done 字段设置成 False。

    我们把新的任务添加到我们的任务数组中,并且把新添加的任务和状态 201 响应给客户端。

    使用如下的 curl 命令来测试这个新的函数:

  • $ curl -i -H "Content-Type: application/json" -X POST -d '{"title":"Read a book"}' http://localhost:5000/todo/api/v1.0/tasks

  • HTTP/1.0 201 Created

  • Content-Type: application/json

  • Content-Length: 104

  • Server: Werkzeug/0.8.3 Python/2.7.3

  • Date: Mon, 20 May 2013 05:56:21 GMT


  • {

  • "task": {

  • "description": "",

  • "done": false,

  • "id": 3,

  • "title": "Read a book"

  • }

  • }

  • 注意:如果你在 Windows 上并且运行 Cygwin 版本的 curl,上面的命令不会有任何问题。然而,如果你使用原生的 curl,命令会有些不同:

  • curl -i -H "Content-Type: application/json" -X POST -d "{"""title""":"""Read a book"""}" http://localhost:5000/todo/api/v1.0/tasks

  • 当然在完成这个请求后,我们可以得到任务的更新列表:

  • $ curl -i http://localhost:5000/todo/api/v1.0/tasks

  • HTTP/1.0 200 OK

  • Content-Type: application/json

  • Content-Length: 423

  • Server: Werkzeug/0.8.3 Python/2.7.3

  • Date: Mon, 20 May 2013 05:57:44 GMT


  • {

  • "tasks": [

  • {

  • "description": "Milk, Cheese, Pizza, Fruit, Tylenol",

  • "done": false,

  • "id": 1,

  • "title": "Buy groceries"

  • },

  • {

  • "description": "Need to find a good Python tutorial on the web",

  • "done": false,

  • "id": 2,

  • "title": "Learn Python"

  • },

  • {

  • "description": "",

  • "done": false,

  • "id": 3,

  • "title": "Read a book"

  • }

  • ]

  • }

  • 剩下的两个函数如下所示:

  • @app.route('/todo/api/v1.0/tasks/<int:task_id>', methods=['PUT'])def update_task(task_id):

  • task = filter(lambda t: t['id'] == task_id, tasks)

  • if len(task) == 0:

  • abort(404)

  • if not request.json:

  • abort(400)

  • if 'title' in request.json and type(request.json['title']) != unicode:

  • abort(400)

  • if 'description' in request.json and type(request.json['description']) is not unicode:

  • abort(400)

㈡ 易语言怎样用api实现服务器、客户组建的功能

可以搜索下Socket套接字,一般的流程是:
WSAStartup 初始化Socket库
socket 创建Socket实例 ,也就是这步确定是UDP还是TCP,是客户还是服务器
然后服务器则是bind绑定端口,listen监听端口,recv接收数据,sned发送数据
客户则是connect连接客户端,接收和发送和服务器一样
数据报则是bind绑定,recvfrom接收数据,sendto发送数据
当然最后还需要closeSocket关闭套接字实例和WSACleanup释放套接字库
我这里这是简单的提一下流程,具体的要参看专门讲Socket的教程!

㈢ YAPI:从0搭建API文档管理工具

最近在找一款API文档管理工具,之前有用过Swagger、API Manager、Confluence,现在用的还是Confluence。

我个人一直不喜欢用Swagger,感觉“代码即文档”,让代码里的文档无处不在,已经对代码造成了一定的入侵了。API Manager就是一个纯API文档管理的工具了。Confluence是万能的,也是最简单的,支持各种插件在线安装,可以有各种布局,支持MD文档,也支持表格、代码块等。

最近看到一篇文章在说YAPI,就准备搭建一个试试效果如何。

YAPI是去哪儿网开源的一款API管理工具,理念如下:

特性:

选择YAPI试试手的原因是因为我看到了它支持MockServer,这样前端开发同学就不用等待后端同学了。主要是我也懒得搭建一套mock服务,有这样一款工具何乐而不为呢?所以今天就找了一台服务器安装了一下。考虑排版问题,就以图片形式放出来了。

nodeJS长期支持版本官网下载地址:https://nodejs.org/dist/v10.16.0/node-v10.16.0-linux-x64.tar.xz,下载后执行如下命令:

nodeJS安装完毕。

YAPI安装,GitHub上已经有比较详细的文档了,地址:https://github.com/YMFE/yapi,这里说一下两种部署方式:

可视化部署:

yapi安装完毕,访问http://127.0.0.1:9090进行可视化配置一步一步往下走即可。

命令行部署(推荐方式):

yapi安装完毕,访问http://127.0.0.1:{config.json中配置的port}即可访问。

node需要安装pm2模块,使用pm2模块后台运行yapi:

运行成功页面:

至此,YAPI就安装完毕了,简单实用一下还是不错的,因为是国产的,整体操作风格还是比较习惯的。在YAPI这里接口更改还有记录哦~

后面再慢慢体验这个里面的一些高级功能吧,比如MockServer、接口测试等功能。

大家还有什么更好用的API管理工具?你觉得一款优秀的API管理工具应该都有哪些必须的功能?欢迎推荐和讨论!

㈣ api服务器简介

了解规则

人们创造了社交礼仪来指引他们的交流。一个例子就是我们如何用电话和其他人交流。假设你正和朋友通话。当他们说话的时候,你知道自己应该保持安静。你知道应该允许他们有短暂的停顿。如果他们问了一个问题,然后保持沉默,你知道他们希望得到回应,现在该你说话了。

计算机有相似的礼仪,虽然它们使用的术语是“协议”。计算机协议就是一组已经被接受的规则,这些规则约束计算机如何交谈。然而,和我们的标准相比,计算机协议是非常死板的。花点时间想想这两个句子“我最喜欢的颜色是蓝色”和“蓝色是我最喜欢的颜色”。虽然它们使用的词的顺序是不同的,但是我们可以分解这两个句子并且知道它们的意思是一样的。很不幸,计算机没那么聪明。

为了让两台计算机有效的交流,服务器必须准确的知道客户端会如何排列它的信息。你可以类比一个人询问一个邮件地址。当你询问一个地址的位置时,你假设首先被告知的是街道地址,随后是城市,州,最后是邮政编码。对于地址的每一部分,你也许会有特定的期望,比如邮政编码应该只包含数字。计算机协议要想工作也需要类似的细节。

Web协议

有一个协议是几乎针对一切的:每一个协议完成不同的工作。你可能听说过一些协议:通信设备上用的蓝牙,收邮件的POP或者IMAP。

在Web上,最主要的协议是超文本传输协议,它的缩写更知名一些,HTTP。当你在浏览器中输入http://example.com 这样的地址的时候,“http”告诉浏览器使用HTTP的规则和服务器通信。

由于HTTP在web上无处不在,因此很多公司选择它作为自己的API的底层协议。使用熟悉的协议的一个好处就是可以降低开发者的学习曲线,鼓励他们使用API。另一个好处是HTTP有几个特性对于构建一个好的API非常有用,随后我们会看到。现在让我们擦去迷雾,看一看HTTP是如何工作的吧。

㈤ 怎么用API网关构建微服务

由于这些问题的存在,客户端与微服务直接通信很少是合理的。 使用API网关通常,一个更好的方法是使用所谓的API网关。API网关是一个服务器,是系统的唯一...

㈥ API服务器是什么意思

简单来说,你使用的api接口会把参数消息传到给api服务器,然后api服务器返回一个处理好消息给你。想象成函数过程的话,就是你使用了这个函数(就是传参),知道返回类型,能得到返回值,具体函数体(也就是api服务器)是怎么做到的你不需要知道。

热点内容
安卓微信深色模式是什么意思 发布:2024-05-06 23:14:41 浏览:685
脚本样本 发布:2024-05-06 23:03:41 浏览:629
sqlserver导出 发布:2024-05-06 23:02:16 浏览:807
phpredis操作 发布:2024-05-06 22:56:24 浏览:583
查看qq加密相册软件 发布:2024-05-06 22:45:36 浏览:619
达芬奇密码电影解说讲的是什么 发布:2024-05-06 22:26:41 浏览:144
服务器提供什么服务 发布:2024-05-06 21:45:20 浏览:213
一汽桌面云服务器地址 发布:2024-05-06 21:19:23 浏览:996
北京市社保官网登录密码是什么 发布:2024-05-06 21:19:15 浏览:380
c语言数组的删除 发布:2024-05-06 20:52:33 浏览:398