什么是URI

在学习如何获取ContentResolver前,有个名词是必须了解的:URI。URI是网络资源的定义,在Android中赋予其更广阔的含义,先看个例子,如下:



将其分为A,B,C,D 4个部分:
A:标准前缀,用来说明一个Content Provider控制这些数据,无法改变的;
B:URI的标识,它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的   类名。这个标识在<provider> 元素的 authorities属性中说明:
<provider name=”.TransportationProvider”  authorities=”com.example.transportationprovider”  . . .  >
C:路径,Content Provider使用这些路径来确定当前需要生什么类型的数据,URI中可能不包括路径,也可能包括多个;
D:如果URI中包含,表示需要获取的记录的ID;如果没有ID,就表示返回全部;
由于URI通常比较长,而且有时候容易出错,切难以理解。所以,在Android当中定义了一些辅助类,并且定义了一些常量来代替这些长字符串,例如:People.CONTENT_URI

<think>嗯,用户之前问过关于口令爆破的问题,现在又问URI是什么。可能需要先确定用户的技术背景,但根据之前的问题,可能有一定的技术基础。URI是计算机术语,但用户可能不太清楚具体定义和组成部分。 首先,URI的全称是统一资源标识符,但用户可能不知道它和URL、URN的区别。需要解释清楚这三个概念之间的关系。可能用户在使用网络时遇到过URI,比如在浏览器地址栏看到的网址,但不知道背后的术语。 需要分步骤介绍,先定义URI,然后组成部分,再举例说明。可能还要提到URI的语法结构,比如scheme、authority、path等部分。另外,要区分URI和URL,URL是URI的子集,而URN是另一种形式,比如书籍的ISBN号。 用户可能需要了解URI的实际应用场景,比如在Web开发中如何构造URI,或者API设计中的使用。同时,举一些具体的例子会有帮助,比如HTTP URI和文件URI的不同格式。 还要考虑用户可能的深层需求,比如为什么需要了解URI?可能是为了学习Web开发,或者解决某个具体问题,比如API调用中的URI构造问题。因此,在解释时要结合实际应用,说明URI的重要性。 另外,要确保用中文解释清晰,避免使用过于专业的术语,但也要保持准确性。可能需要检查之前回答的口令爆破的结构,保持类似的清晰结构,比如分定义、组成部分、示例、类型、应用场景等部分。 最后,确认是否遗漏了URI的其他重要方面,比如编码规则、保留字符等,但作为基础介绍,可能不需要深入这些细节,除非用户有进一步的问题。需要保持回答简洁,但涵盖关键点。</think>以下是对URI(统一资源标识符)的逐步解析: --- ### 1. **基本定义** URI(Uniform Resource Identifier)是用于**唯一标识资源**的字符串,遵循**RFC 3986标准**。其核心作用是通过统一格式定位或命名网络/本地资源。 公式化表示为: $$ \text{URI} = \text{定位方式} + \text{资源标识规则} $$ --- ### 2. **关键组成部分** 完整URI语法结构如下: ``` scheme:[//authority][/path][?query][#fragment] ``` - **Scheme(协议方案)** 定义资源访问方式,例如: - `http`:网页资源 - `ftp`:文件传输 - `mailto`:电子邮件地址 - **Authority(授权部分)** 通常包含用户认证和主机信息: $$ \text{authority} = [\text{userinfo}@]\text{host}[:port] $$ - 示例:`user:pass@example.com:8080` - **Path(路径)** 资源在服务器上的层级位置,如:`/documents/report.pdf` - **Query(查询参数)** 以`?`起始的键值对,用于动态请求: $$ \text{query} = key1=value1&key2=value2 $$ - 示例:`?page=3&sort=date` - **Fragment(片段标识)** 以`#`标记资源内部锚点,如:`#section2` --- ### 3. **URI类型对比** | 类型 | 作用 | 示例 | |------|------|------| | **URL**<br>(统一资源定位符) | 通过**访问路径**标识资源 | `https://www.example.com/img/logo.png` | | **URN**<br>(统一资源名称) | 通过**持久唯一名称**标识资源 | `urn:isbn:978-7-04-049592-4`(图书ISBN) | --- ### 4. **实际应用示例** - **Web资源** `https://user:pass@api.example.com/v1/data?limit=10#results` - Scheme: `https` - Authority: `user:pass@api.example.com` - Path: `/v1/data` - Query: `limit=10` - Fragment: `results` - **本地文件** `file:///C:/Users/Public/Documents/report.docx` - **特殊协议** `tel:+8613800138000`(拨打电话) `geo:39.9042,116.4074`(地理坐标) --- ### 5. **编码规则** - **保留字符**需转义为`%十六进制`形式: ```plaintext 空格 → %20,/ → %2F,? → %3F 等 ``` - **非ASCII字符**需UTF-8编码后转义,例如: `中文 → %E4%B8%AD%E6%96%87` --- ### 6. **技术意义** - 现代互联网架构的基础组件 - RESTful API设计的核心要素 - 浏览器、爬虫等工具的资源定位依据 --- 通过合理设计URI结构(如使用语义化路径`/products/{id}`),可显著提升系统可维护性和用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值