认识一下什么是RestfulAPI

本文介绍了RESTful API的概念,它是面向资源的编程方法,通过HTTP的GET、POST、PUT、DELETE等方法进行增删改查操作。文章详细解析了HTTP请求的组成部分,包括谓词、URL和HTTP协议版本,并探讨了RESTful API中的HEAD信息,如User-Agent、Authorization、Accept和Content-Type等。此外,还提供了创建Django项目并实现RESTful API的实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. RestfulAPI与HTTP简介

1、什么是RestfulAPI

  • REST直接翻译:表现层状态转移,实质就是一种面向资源编程的方法
  • REST描述的是在网络中client和server的一种交互形式;REST本身不实用,实用的是如何设计 RESTful API(REST风格的网络接口)
  • RestfulAPI中认为网络上所有的东西都是一种资源,对这些资源操作时无非就是增删改查
  • 网络上的资源一般都用一段url代替,比如:http://www.chnsys.com/asset 代替资产资源
  • 根据发送请求的method方法判断如何操作这些资源
    • GET(SELECT): 从服务器取出资源(一项或多项)。
    • POST(CREATE): 在服务器新建一个资源。
    • PUT(UPDATE): 在服务器更新资源(客户端提供改变后的完整资源)。
    • DELETE(DELETE): 从服务器删除资源。
    • PATCH(UPDATE): 在服务器更新资源(客户端提供改变的属性)。

2、HTTP的第一行包含三个信息:谓词、URL、HTTP协议版本。三个数据使用空格隔开

  • POST http://comet.chouti.com/comet/connect HTTP/1.1

1、谓词(POST)

  • WEB API就是使用谓词作为默认的路由方式,最常用的谓词有:POST\DELETE\PUT\GET,这四个谓词对应了“增、删、改、查”四个动作
  • 其中,GET,DELETE不包含BODY,PUT,POST可以包含BODY

2、URl

  • 网络上的资源一般都用一段url代替,比如:http://www.chnsys.com/asset 代替资产资源

3、HTTP协议版本

  • HTTP的第一行内容就是这些: POST http://comet.chouti.com/comet/connect HTTP/1.1
  • 接下来会有一个\r\n来进行换行,接下来就是HTTP HEAD部分,HTTP HEAD描述了HTTP请求和响应。
  • HTTP HEAD即为HTTP协议中最重要的部分,他包含了编码、BODY长度、内容协商等信息,你也可以包含一些自定义信息

3、RestFul API中常用的HEAD信息

  • User-Agent:用户代理,是什么客户端发出的请求,如IE、Chrome、Fiddler等
  • HOST:域名
  • Authorization:验证信息
  • Accept:接受何种序列化方式返回的数据,用MIME表示,用于对响应数据的内容协商,可以包含多个MIME,按优先顺序排列,如application/json,application/xml,text/html
  • Content-Type:使用一个MIME表示,表示所发送请求的Body的序列化方式,常见的application/json,
    还有WEB交互最常使用的application/x-www-form-urlencoded,都表示了你的body部分的序列化方式,在请求、响应中都会出现
  • HTTP HEAD部分是HTTP协议中最核心的部分,可配置向非常多这里就不列举了
  • 响应部分也分为头部和Body,响应头部和请求头部最大的不同在于响应首行存在一个HTTP Code HTTP Code作为API的调用状态的展示,也很重要,在REST API中最常用的状态码一般为2XX,4XX,5XX三个段
  • 在首部之后有一个空行(\r\n)接下来就是Content,这里有具体的业务数据,根据不同的Content-Type使用不同的序列化方式表示,例如JSON,XML,甚至HTML

4、用一张图为大家展示一下这些知识

在这里插入图片描述

二. RestfulAPI使用举例

1、创建django项目testRestfulAPI

urls.py:

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^asset/', views.AssetView.as_view()),
]

views.py:

from django.shortcuts import HttpResponse
from django.views import View
import json

class AssetView(View):
    def get(self,request):                # 返回查询信息
        print('response_select',request.META.get('HTTP_HOSTNAME'))     # c1.com
        return HttpResponse(json.dumps({'status':'ok','method':'select'}))

    def post(self,request):              # 创建
        print('response_create',request.body)     # {"hostname": "c1.com"}
        return HttpResponse(json.dumps({'status':'ok','method':'create'}))

    def put(self,request):              # 更新
        print('response_update',request.body)     # {"hostname": "c1.com"}
        return HttpResponse(json.dumps({'status':'ok','method':'update'}))

    def delete(self,request):          # 删除
        print('response_delete',request.body)     # {"hostname": "c1.com"}
        return HttpResponse(json.dumps({'status':'ok','method':'delete'}))

2、创建文件test.py使用requests模块模拟增删改查(注释服务器端csrf)

test.py:

import requests

# 1、查询
response_select = requests.get('http://127.0.0.1:8000/asset/',
                        headers={'hostname':'c1.com'},
                        )
print('response_select',response_select.json())      # {'method': 'select', 'status': 'ok'}

# 2、创建
response_create = requests.post('http://127.0.0.1:8000/asset/',
                        headers='',
                        json={'hostname':'c1.com'}
                        )
print('response_create',response_create.json())      # {'status': 'ok', 'method': 'create'}

# 3、更新
response_put = requests.put('http://127.0.0.1:8000/asset/',
                        headers='',
                        json={'hostname':'c1.com'}
                        )
print('response_update',response_put.json())         # {'method': 'update', 'status': 'ok'}

# 4、删除
response_delete = requests.delete('http://127.0.0.1:8000/asset/',
                        headers='',
                        json={'hostname':'c1.com'}
                        )
print('response_delete',response_delete.json())     # {'status': 'ok', 'method': 'delete'}
<think>好的,我现在要处理用户关于Android 12中RKNN开发配置和使用教程的问题。首先,我需要回顾用户提供的引用内容,看看是否有相关的信息。 用户提供了三个引用。引用1提到了RKNN Model Zoo和RKNN Toolkit2的环境配置,包括安装Miniconda3。引用2是关于系统镜像下载,特别是Ubuntu 22.04版本和导出ONNX模型。引用3讨论了RV1808/1126使用RKNN作为MediaPipe推理后端的步骤,包括配置参数如use_rga、use_mmap和data_type的设置,以及反量化的处理。 用户的问题集中在Android 12上,所以需要将引用中的信息与Android系统关联起来。引用3提到了MediaPipe和RKNN的集成,这可能适用于Android开发,但需要确认是否支持Android 12。此外,RKNN Toolkit2的环境配置可能在不同平台上有所不同,用户可能需要针对Android进行调整。 接下来,我需要考虑Android开发中RKNN的一般步骤,比如环境准备、模型转换、集成到Android应用、配置参数和性能优化。结合引用中的信息,模型转换部分可以参考引用2提到的导出ONNX模型,然后使用RKNN Toolkit转换为RKNN格式。引用3中的配置参数(如use_rga、use_mmap、data_type)可能在Android中同样适用,但需要查阅相关文档确认。 可能还需要指导用户如何将RKNN库集成到Android项目中,比如添加依赖项或NDK配置。此外,性能优化方面,引用3提到的反量化处理可能需要特别注意,尤其是在Android设备上的实现。 最后,确保回答结构清晰,分步骤说明,并引用提供的资料。需要验证引用中的信息是否适用于Android 12,例如系统镜像是否支持,或者是否有特定版本的要求。如果某些步骤在引用中没有明确说明,可能需要提示用户参考官方文档或社区资源。</think>### Android 12 RKNN 开发配置与使用教程 #### 1. **环境准备** - **系统镜像与工具链**: 根据引用[2],建议使用Ubuntu 22.04作为开发环境,并下载Orange Pi 5 Pro等支持RKNN的硬件镜像。对于Android 12开发,需确保RKNN Toolkit2适配Android NDK版本(推荐NDK 21+)[^2]。 - **安装RKNN Toolkit2**: 参考引用[1],通过Miniconda3配置Python环境(建议Python 3.8),并安装RKNN Toolkit2以支持模型转换与推理。命令示例: ```bash pip install rknn_toolkit2 ``` #### 2. **模型转换(ONNX转RKNN)** - **导出ONNX模型**: 使用PyTorch或TensorFlow等框架导出模型为ONNX格式(引用[2])。 - **转换为RKNN格式**: 编写RKNN配置文件(`config.yml`),指定输入尺寸、量化方式等参数。示例代码: ```python from rknn.api import RKNN rknn = RKNN() rknn.config(target_platform='rk3568', mean_values=[[127.5]], std_values=[[127.5]]) rknn.load_onnx(model="model.onnx") rknn.build(do_quantization=True, dataset="dataset.txt") rknn.export_rknn("model.rknn") ``` #### 3. **Android项目集成** - **添加RKNN库依赖**: 将编译好的RKNN动态库(`librknnrt.so`)和模型文件(`model.rknn`)放入Android项目的`jniLibs`目录。 - **JNI接口开发**: 通过JNI调用RKNN的C/C++ API实现推理。关键配置参考引用[3]: ```cpp #include <rknn/rknn_runtime.h> rknn_context ctx; int ret = rknn_init(&ctx, model_path, 0, 0, nullptr); ret = rknn_inputs_set(ctx, input_num, input_attrs); ret = rknn_run(ctx, nullptr); ret = rknn_outputs_get(ctx, output_num, output_attrs, nullptr); ``` #### 4. **关键配置参数** - **use_rga与use_mmap**: 根据引用[3],若Android设备不支持硬件加速(如RGA),需将`use_rga`和`use_mmap`设为`false`。 - **数据量化类型**: `data_type`可选`uint8`或`fp32`。若选`uint8`,需手动实现反量化;若选`fp32`,RKNN会自动处理[^3]。 #### 5. **性能优化** - **多线程推理**: 利用Android的`ThreadPoolExecutor`并行处理输入数据。 - **内存优化**: 启用`use_mmap`(若支持)减少内存拷贝开销,或通过零拷贝技术直接操作物理内存。 #### 6. **调试与验证** - **日志输出**: 启用RKNN的调试模式(`RKNN_LOG_LEVEL=DEBUG`)查看详细运行信息。 - **性能分析**: 使用`rknn.query(RKNN_QUERY_PERF_DETAIL)`获取各层耗时,针对性优化模型结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值