浅谈Endpoint

刚开始知道EndPoint是从学Flask-restful的时候,看了一些文章以后觉得理解这个还是得从flask的url与函数之间的指向过程,之前一直认为:

@app.route("/index")
def index:
   pass

我们进入/index的时候就是以为直接找到index函数,执行里面的内容,但是其实不然

在源码中我们可以发现:

  • 每个应用程序app都有一个view_functions,这是一个字典,存储endpoint-view_func键值对。add_url_rule的第一个作用就是向view_functions中添加键值对(这件事在应用程序run之前就做好了)
  • 每个应用程序app都有一个url_map,它是一个Map类(具体实现在werkzeug/routing.py中),里面包含了一个列表,列表元素是Role的实例(werkzeug/routing.py中)。add_url_rule的第二个作用就是向url_map中添加Role的实例(它也是在应用程序run之前就做好了)
    我们可以通过一个例子来看
from flask import Flask
app=Flask(__name__)
@app.route('/test', endpoint='Test')
def test():
    pass
@app.route('/', endpoint='index')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    print(app.view_functions)
    print(app.url_map)
    app.run()

 

我们发现url_map中对应的是url与endpoint的映射

所以endpoint就像是一个url的id一样,这个id就可以表示这个url

 

为什么不直接用视图函数呢?

现在的问题是:“为什么我们需要这个额外的层 (endpoint) ? 为什么要将路径映射到endpoint,然后将endpoint映射到视图函数? 为什么不跳过这个中间步骤?

原因是因为这种方式更强大。 例如,Flask Blueprints允许您将应用程序分成不同的部分。 我可能将所有管理端资源都放在名为“admin”的 blueprint 中,并将所有用户级资源放在“user”的 endpoint中。

Blueprints 允许您将这些分隔到命名空间中。 例如...
main.py:

from flask import Flask, Blueprint
from admin import admin
from user import user

app = Flask(__name__)
app.register_blueprint(admin, url_prefix='admin')
app.register_blueprint(user, url_prefix='user')

admin.py:

admin = Blueprint('admin', __name__)

@admin.route('/greeting')
def greeting():
    return 'Hello, administrative user!'

user.py:

user = Blueprint('user', __name__)
@user.route('/greeting')
def greeting():
    return 'Hello, lowly normal user!'

请注意,在这两个blueprint中,“/ greeting”路由是一个名为“greeting”的函数。 如果我想引用admin 的 “greeting” 函数,我们需要使用 "admin.greeting"。 endpoint 允许我们将blueprint的名称指定为端点的一部分,从而实现一种命名空间。 所以,我们可以使用下面的做法:

print url_for('admin.greeting') # Prints '/admin/greeting'
print url_for('user.greeting') # Prints '/user/greeting'

参考文章:https://www.cnblogs.com/eric-nirnava/p/endpoint.html

                  https://www.jianshu.com/p/0611f044efc4

作者:Alex_Dj
链接:https://www.jianshu.com/p/0611f044efc4
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

<think>嗯,用户想了解API endpoint的概念和用法。首先,我需要根据提供的引用材料来整理信息。根据引用[1],API endpoint是API中定义的特定路径或地址,用于网络交互和数据交换。每个端点对应不同的操作,比如获取或更新数据。引用[2]提到endpoint可以是IP加端口或URL,例如AWS服务。而引用[3]解释说,当API发送请求时,响应的来源位置就是endpoint,它在API文档中非常关键,因为开发者需要用它来发起请求。 接下来,我需要用中文清晰解释这些概念。要分步骤说明,先定义,再结构组成,然后使用方式,最后应用场景。还要注意用户可能需要具体例子,比如HTTP方法和URL示例。另外,用户可能关心如何实际使用endpoint,比如发送请求到特定URL,所以需要包含代码示例,比如Python的requests库。 同时,确保遵循系统级指令,数学公式用$...$,独立公式用$$...$$,但这里可能用不上数学公式。但要注意LaTeX的正确使用,比如变量或代码块。需要生成相关问题,可能涉及技术要点、区别、配置注意事项等。例如,如何设计RESTful端点,与API的区别,私有API的DNS配置影响等。 还要检查引用标记是否正确添加,比如在提到端点的操作时引用[^1],AWS的例子引用[^2],请求响应的位置引用[^3],私有DNS的问题引用[^4]。最后,确保回答结构清晰,分点说明,帮助用户逐步理解。可能还需要提醒用户注意安全性,比如HTTPS和认证机制,这在实际应用中是关键点。</think>### API endpoint的概念与使用说明 #### 1. **基本定义** API endpoint(API端点)是API中定义的特定路径或地址,用于通过网络请求与后端服务进行交互和数据交换。它通常以URL形式呈现,每个端点对应不同的操作或资源,例如获取数据(GET)、提交数据(POST)、更新数据(PUT)或删除数据(DELETE)等。 #### 2. **结构组成** 一个典型的API endpoint包含以下要素: - **基础URL**:如`https://api.example.com` - **路径参数**:如`/users/{id}`中的`{id}` - **HTTP方法**:包括GET、POST、PUT、DELETE等 - **查询参数**:如`?page=2&limit=10` 例如,一个完整的端点可能是: $$ \text{GET } \texttt{https://api.example.com/users/123?fields=name,email} $$ #### 3. **使用方式** 通过发送HTTP请求到指定端点实现功能: ```python import requests # 获取用户数据 response = requests.get("https://api.example.com/users/123") print(response.json()) # 提交数据 data = {"name": "Alice", "email": "alice@example.com"} requests.post("https://api.example.com/users", json=data) ``` #### 4. **技术要点** - **认证机制**:需在请求头中添加API密钥或令牌,如: ```python headers = {"Authorization": "Bearer YOUR_TOKEN"} requests.get("https://api.example.com/protected", headers=headers) ``` - **版本控制**:端点常包含版本号,如`/v1/users` - **安全性**:推荐使用HTTPS协议加密通信 #### 5. **应用场景** - 云服务集成(如AWS的API Gateway端点) - 微服务间通信 - 第三方数据接入(如支付接口`/v1/payments`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值