6.29-6.30 LL--实习日志--Restful API 概念理解+Restful_API编写

来源:互联网 发布:简明python教程 中文 编辑:程序博客网 时间:2024/05/16 12:40

1 Restful API 的概念
链接
API需求 : iOS,Android APP , B-S 三者都需要 获得 数据的信息,按理说需要写三套 mysql的配置,非常的麻烦和不安全,API就是为了解决这种情况而诞生,由一个地方统一提供API接口,哪个平台想使用就直接调用这个API接口来或许信息就可以了
Restful-API 需求 ( 表述性状态传递(英文:Representational State Transfer)),是一种 规范化的接口写法


  1. Restful 的历史来源
    2.1 Rest的 历史
    作者在论文中将REST定位为“分布式超媒体应用(Distributed Hypermedia System)”的架构风格,它在文中提到一个名为“HATEOAS(Hypermedia as the engine of application state)”的概念,本身Rest是一种 架构风格
    2.2 应用状态(application state)的解释
    应用状态可以理解为Web应用的客户端的状态,简单起见可以理解为会话状态。资源在浏览器中以超媒体的形式呈现,通过点击超媒体中的链接可以获取其它相关的资源或者对当前资源进行相应的处理,获取的资源或者针对资源处理的响应同样以超媒体的形式再次呈现在浏览器上。由此可见,超媒体成为了驱动客户端会话状态的转换的引擎。
    2.3 采用URI标识资源
    资源的概念 :任何寄宿于Web可供操作的“事物”均可视为资源。资源可以体现为经过持久化处理保存到磁盘上的某个文件或者数据库中某个表的某条记录,也可以是Web应用接受到请求后采用某种算法计算得出的结果。资源可以体现为一个具体的物理对象,它也可以是一个抽象的流程。也就是“资源”的概念是一个非常宽泛的概念
    Web API的标识符 是URI ,URI vs URL
    2.4 使用连接相关联的资源
    资源不是 孤立的,和其他资源之间是相互关联的,所以我们需要把他们联系在一起

  1. 定义标准的接口,针对不同资源的web API 都可以定义 一致性的操作来操作他们的,这个是RESTful Web API和采用RPC风格的SOAP Web服务的区别

  2. 针对资源的使用都是用 标准的HTTP方法


简单理解API 的方式
1. 什么是 Restful Api
RESTful API 是基于HTTP协议产生的一种相对简单的API设计方案,属于无状态传输。RESTful 的核心是 everything is a “resource”,所有的HTTP action,都应该是相应resource上可以被操作和处理的,而API 就是对资源的管理操作,而这个具体操作是由 HTTP action 指定的

  1. HTTP协议语义使用方法
    客户端向服务端发起索取资源的操作只能通过HTTP协议语义来进行交互。最常用的HTTP协议语义有以下5个,
    GET : 从服务器取出资源(一项或多项) POST:在服务器新建一个资源 PUT:在服务器更新资源(客户端提供完整资源数据) DELETE:从服务器删除资源 HEAD : 从服务器获取报头信息(不是资源)

  2. WEB服务接收与返回的互联网资源类型
    客户端与服务端进行交互响应时,需要规定双方能够接受何种类型的媒体表现形式,最常见的以application开头的媒体格式类型有:application/json: JSON数据格式 | application/xhtml+xml:XHTML格式 | application/xml: XML数据格式 | application/atom+xml:Atom XML聚合格式

    1. API设计原则
      4.1 URL尽量使用名词,API尽量的部署在专用域名下面 ,如果API不需要扩展的时候,应该放在主域名下,同时应该把API的版本号放在URL或者header信息中
      4.2 路径(终点),表示的是API的具体的网址,每个网址对应的就是资源,网址的命名规则是需要和表的数量对应起来的 

5. 设计流程
流程图
  
还有别的链接未看

Django下的Restful


Restful_API 的编写
1.安装数据模型和Serializer,安装model,

  1. 创建 Serializer 类,类似于 Form。它的作用就是从你传入的参数中提取出你需要的数据,并把它转化为 json 格式(注意,已经是字节码了),同时支持反序列化到model对象。在 horizongov(APP的名字)文件夹中添加 serializers.py 并在其添加如下:  
    创建的类如下 
from rest_framework import serializersfrom snippets.models import Snippet, LANGUAGE_CHOICES,  class SnippetSerializer(serializers.Serializer):                # 它序列化的方式很类似于Django的forms    id = serializers.IntegerField(read_only=True)    title = serializers.CharField(required=False, allow_blank=True, max_length=100)    code = serializers.CharField(style={'base_template': 'textarea.html'})      # style的设置等同于Django的widget=widgets.Textarea    linenos = serializers.BooleanField(required=False)                          # 用于对浏览器的上的显示    language = serializers.ChoiceField(choices=LANGUAGE_CHOICES, default='python')    style = serializers.ChoiceField(choices=STYLE_CHOICES, default='friendly')    def create(self, validated_data):        """        Create and return a new `Snippet` instance, given the validated data.        """        return Snippet.objects.create(**validated_data)    def update(self, instance, validated_data):        """        Update and return an existing `Snippet` instance, given the validated data.        """        instance.title = validated_data.get('title', instance.title)        instance.code = validated_data.get('code', instance.code)        instance.linenos = validated_data.get('linenos', instance.linenos)        instance.language = validated_data.get('language', instance.language)        instance.style = validated_data.get('style', instance.style)        instance.save()        return instance

3.使用ModelSerializer(类),类似于modelform可以直接关联到对应的表

class SnippetSerializer(serializers.ModelSerializer):    class Meta:        model = Snippet        fields = ('id', 'title', 'code', 'linenos', 'language', 'style')

4.在view 中使用 Serializer 的方式,写函数


完整的过程版本建议版本的快速开发 

  1. 安装步骤 

1.1Markdown 是一种支持 browsable 格式的API.    

pip install djangorestframeworkpip install markdown       pip install django-filter

1.2在setting.py 的INSTALLED_APPS添加 rest_framework,如下: 
 

INSTALLED_APPS = (    ...    'rest_framework',)

1.3 在根目录下面设置一个rest_framework框架的 login 和 logout 视图添加url,可以理解为了一层的设置路由器的层级关系!

urlpatterns = [    ...    url(r'^api-au th/',include('rest_framework.u rls',namespace='rest_framework'))]

2.创建了两个文件retail_serializers_api.py retail_restful_endpoint.py 前者是为了获得model 层面的数码片`

1.import 的东西不应该太多,可能会出现错误
2.首先建立和model 之间的关系 

class CompanySerializer(serializers.HyperlinkedModelSerializer):    class Meta:        model = Company        fields = data_export_setting.Company_form_stand
原创粉丝点击