精华内容
下载资源
问答
  • restFul面试题

    万次阅读 2019-06-04 22:17:19
    restful其实就是一套编写接口的协议,协议规定如何编写以及如何设置返回值、状态码等信息。 最显著的特点: restful: 给用户一个url,根据method不同在后端做不同的处理,比如:post 创建数据、get获取数据、put和...
    • restful其实就是一套编写接口的协议,协议规定如何编写以及如何设置返回值、状态码等信息。
    • 最显著的特点:
      restful: 给用户一个url,根据method不同在后端做不同的处理,比如:post 创建数据、get获取数据、put和patch修改数据、delete删除数据。
      no rest: 给调用者很多url,每个url代表一个功能,比如:add_user/delte_user/edit_user/
    • 当然,还有协议其他的,比如:
    • 版本,来控制让程序有多个版本共存的情况,版本可以放在 url、请求头(accept/自定义)、GET参数
    • 状态码,200/300/400/500
    • url中尽量使用名词,restful也可以称为“面向资源编程”
    • api标示:
      api.luffycity.com
      www.luffycity.com/api/

    1. 你的restful是怎么学的?
    • 因为之前公司要写这样项目
    • 接口
    • 公司要做前后端分离的项目
    • 公司要做微信小程序的开发
    • 所以就开始学习restful规范,看的技术文章 阮一峰的博客学到的规范。
    1. 状态码都有哪些?

    2. method都有哪些?

    3. 常见请求头有哪些?

    4. 你是用什么开发的restful接口?
      使用django rest framework框架。

    5. 为什么要使用django rest framework框架?
      在编写接口时可以不适用django rest framework框架,

    如果不使用:也可以做,那么就可以django的CBV来实现,开发者编写的代码会更多一些。
    如果 使用:内部帮助我们提供了很多方便的组件,我们通过配置就可以完成相应操作,如:

    • 序列化,可以做用户请求数据校验+queryset对象的序列化称为json
    • 解析器,获取用户请求数据request.data,会自动根据content-type请求头的不能对数据进行解析
    • 分页,将从数据库获取到的数据在页面进行分页显示。
      还有其他:
    • 认证
    • 权限
    • 访问频率控制
    1. rest framework 视图你都用过哪些基类?

    a. 继承 APIView
    这个类属于rest framework中顶层类,内部帮助我们实现了只是基本功能:认证、权限、频率控制,但凡是数据库、分页等操作都需要手动去完成,比较原始。

    class GenericAPIView(APIView)

    def post(…):
    pass

    b. 继承 GenericViewSet(ViewSetMixin, generics.GenericAPIView)
    如果继承它之后,路由中的as_view需要填写对应关系.as_view({‘get’:‘list’,‘post’:‘create’})
    在内部也帮助我们提供了一些方便的方法:

    • get_queryset
    • get_object
    • get_serializer

    注意:要设置queryset字段,否则会跑出断言的异常。

    只提供增加功能

    class TestView(GenericViewSet):
    serializer_class = XXXXXXX

    def create(self,*args,**kwargs):
    pass # 获取数据并对数据进行操作

    c. 继承

    • ModelViewSet
    • mixins.CreateModelMixin,GenericViewSet
    • mixins.CreateModelMixin,DestroyModelMixin,GenericViewSet

    对数据库和分页等操作不用我们在编写,只需要继承相关类即可。

    示例:只提供增加功能
    class TestView(mixins.CreateModelMixin,GenericViewSet):
    serializer_class = XXXXXXX

    类的继承关系

    1. 认证流程?
    • 如何编写?写类并实现authticate
    • 方法中可以定义三种返回值:
    • (user,auth),认证成功
    • None , 匿名用户
    • 异常 ,认证失败
    • 流程:
    • dispatch
    • 再去request中进行认证处理
    1. 访问频率控制
    • 匿名用户,根据用户IP或代理IP作为标识进行记录,为每一个用户在redis中创建一个列表
      {
      throttle_1.1.1.1:[1526868876.497521,152686885.497521…]
      throttle_1.1.1.2:[1526868876.497521,152686885.497521…]
      throttle_1.1.1.3:[1526868876.497521,152686885.497521…]
      throttle_1.1.1.4:[1526868876.497521,152686885.497521…]
      throttle_1.1.1.5:[1526868876.497521,152686885.497521…]
      }

    每个用户再来访问时,需要先去记录中剔除以及过期时间,再根据列表的长度判断是否可以继续访问。

    如何封IP:在防火墙中进行设置

    • 注册用户,根据用户名或邮箱进行判断。
      {
      throttle_xxxx1:[1526868876.497521,152686885.497521…]
      throttle_xxxx2:[1526868876.497521,152686885.497521…]
      throttle_xxxx3:[1526868876.497521,152686885.497521…]
      throttle_xxxx4:[1526868876.497521,152686885.497521…]

    }

    每个用户再来访问时,需要先去记录中剔除以及过期时间,再根据列表的长度判断是否可以继续访问。

    1分钟:40次

    11. 接口的幂等性?(是否会造成2次伤害)
    一个接口通过1次相同的访问,再对该接口进行N次相同的访问时候,对资源不造影响,那么就认为接口具有幂等性。
    比如:
    GET, 第一次获取结果、第二次也是获取结果对资源都不会造成影响,幂等。
    POST,第一次新增数据,第二次也会再次新增,非幂等。
    PUT, 第一次更新数据,第二次不会再次更新,幂等。
    PATCH,第一次更新数据,第二次不会再次更新,非幂等。
    DELTE,第一次删除数据,第二次不在再删除,幂等。

    1. Https和Http区别?
      端口:
      http:80
      https: 443
      流程:
    • 自定义证书
    • 认证机构

    推荐阅读
    >>我的博客
    >>学习交流或获取更多资料欢迎加入QQ群

    展开全文
  • Restful风格编程面试题

    千次阅读 2020-04-07 16:52:58
    Restful风格面试题

    Restful风格编程简介

    Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。

    Restful风格的请求使用“url+请求方式”表示一次请求目的,
    HTTP 协议里面四个表示操作方式的动词如下:
    GET:用于获取资源
    POST:用于新建资源
    PUT:用于更新资源
    DELETE:用于删除资源

    例如:

    
    /user/1         GET : 得到 id = 1 的 user
     /user/1        DELETE: 删除 id = 1 的 user/user/1 
              		PUT: 更新 id = 1 的 user/user 
    				POST: 新增 user
    

    上述url地址 /user/1 中的1就是要获得的请求参数,
    在SpringMVC中可以使用占位符进行参数绑定。

    地址/user/1 RequestMapping的value可以写成/user/{id},占位符{id}对应的就是1的值。

    Restful风格编程示例

    在业务方法中我们可以使用@PathVariable注解进行占位符的匹配获取工作。

    访问路径: http://localhost:8080/quick17/zhangsan

    @RequestMapping(value="/quick17/{name}")
    @ResponseBody
    public void save17(@PathVariable(value="name")
    String username) throws IOException {        
    System.out.println(username); 
    }
    

    程序执行结果:
    zhangsan

    展开全文
  • 面试题restful

    千次阅读 2019-05-14 10:58:00
    面试题restful) 1. 谈谈你对restful 规范的理解? - restful其实就是一套编写接口的协议,协议规定如何编写以及如何设置返回值、状态码等信息。 - 最显著的特点: restful: 给用户一个url,根据...

    面试题(restful)

     
    复制代码
    1. 谈谈你对restful 规范的理解?
                - restful其实就是一套编写接口的协议,协议规定如何编写以及如何设置返回值、状态码等信息。
                - 最显著的特点:
                    restful: 给用户一个url,根据method不同在后端做不同的处理,比如:post 创建数据、get获取数据、put和patch修改数据、delete删除数据。
                    no rest: 给调用者很多url,每个url代表一个功能,比如:add_user/delte_user/edit_user/
                - 当然,还有协议其他的,比如:
                    - 版本,来控制让程序有多个版本共存的情况,版本可以放在 url、请求头(accept/自定义)、GET参数
                    - 状态码,200/300/400/500
                    - url中尽量使用名词,restful也可以称为“面向资源编程”
                    - api标示:
                        api.luffycity.com
                        www.luffycity.com/api/
                ...
                .....
            2. 你的restful是怎么学的?
                - 因为之前公司要写这样项目
                    - 接口
                    - 公司要做前后端分离的项目
                    - 公司要做微信小程序的开发
                - 所以就开始学习restful规范,看的技术文章 阮一峰的博客学到的规范。
                
            3. 状态码都有哪些?
            
            4. method都有哪些?
            
            5. 常见请求头有哪些?
            
            6. 你是用什么开发的restful接口?
                使用django rest framework框架。
                
            7. 为什么要使用django rest framework框架?
                在编写接口时可以不适用django rest framework框架,
                
                如果不使用:也可以做,那么就可以django的CBV来实现,开发者编写的代码会更多一些。
                如果  使用:内部帮助我们提供了很多方便的组件,我们通过配置就可以完成相应操作,如:
                            - 序列化,可以做用户请求数据校验+queryset对象的序列化称为json
                            - 解析器,获取用户请求数据request.data,会自动根据content-type请求头的不能对数据进行解析
                            - 分页,将从数据库获取到的数据在页面进行分页显示。
                            还有其他:
                                - 认证
                                - 权限
                                - 访问频率控制
                                - ... 
                    
            8. rest framework 视图你都用过哪些基类?
                
                a. 继承 APIView
                    这个类属于rest framework中顶层类,内部帮助我们实现了只是基本功能:认证、权限、频率控制,但凡是数据库、分页等操作都需要手动去完成,比较原始。
                    
                
                
                   class GenericAPIView(APIView)
                        
                        def post(...):
                            pass 
                        
                        
                        
                b. 继承 GenericViewSet(ViewSetMixin, generics.GenericAPIView)
                    如果继承它之后,路由中的as_view需要填写对应关系    .as_view({'get':'list','post':'create'})
                    在内部也帮助我们提供了一些方便的方法:
                        - get_queryset
                        - get_object
                        - get_serializer
                    
                    注意:要设置queryset字段,否则会跑出断言的异常。
                    # 只提供增加功能
                    class TestView(GenericViewSet):
                        serializer_class = XXXXXXX
    
                        def create(self,*args,**kwargs):
                            pass # 获取数据并对数据进行操作
            
                    
                c. 继承 
                        - ModelViewSet
                        - mixins.CreateModelMixin,GenericViewSet
                        - mixins.CreateModelMixin,DestroyModelMixin,GenericViewSet
                
                    对数据库和分页等操作不用我们在编写,只需要继承相关类即可。
                    
                    示例:只提供增加功能
                    class TestView(mixins.CreateModelMixin,GenericViewSet):
                        serializer_class = XXXXXXX
            
            
                类的继承关系
            
            
            9. 认证流程?
                - 如何编写?写类并实现authticate
                - 方法中可以定义三种返回值:
                    - (user,auth),认证成功
                    - None , 匿名用户
                    - 异常 ,认证失败
                - 流程:
                    - dispatch 
                    - 再去request中进行认证处理
                
            10. 访问频率控制 
                - 匿名用户,根据用户IP或代理IP作为标识进行记录,为每一个用户在redis中创建一个列表
                    {
                        throttle_1.1.1.1:[1526868876.497521,152686885.497521...]
                        throttle_1.1.1.2:[1526868876.497521,152686885.497521...]
                        throttle_1.1.1.3:[1526868876.497521,152686885.497521...]
                        throttle_1.1.1.4:[1526868876.497521,152686885.497521...]
                        throttle_1.1.1.5:[1526868876.497521,152686885.497521...]
                    }
                    
                    每个用户再来访问时,需要先去记录中剔除以及过期时间,再根据列表的长度判断是否可以继续访问。
                    
                    如何封IP:在防火墙中进行设置
                - 注册用户,根据用户名或邮箱进行判断。
                    {
                        throttle_xxxx1:[1526868876.497521,152686885.497521...]
                        throttle_xxxx2:[1526868876.497521,152686885.497521...]
                        throttle_xxxx3:[1526868876.497521,152686885.497521...]
                        throttle_xxxx4:[1526868876.497521,152686885.497521...]
                    
                    }
                    
                    每个用户再来访问时,需要先去记录中剔除以及过期时间,再根据列表的长度判断是否可以继续访问。
            
                1分钟:40次
    
    
          
               11. 接口的幂等性?(是否会造成2次伤害)
               一个接口通过1次相同的访问,再对该接口进行N次相同的访问时候,对资源不造影响,那么就认为接口具有幂等性。
               比如:
                GET, 第一次获取结果、第二次也是获取结果对资源都不会造成影响,幂等。
                POST,第一次新增数据,第二次也会再次新增,非幂等。
                PUT, 第一次更新数据,第二次不会再次更新,幂等。
                PATCH,第一次更新数据,第二次不会再次更新,非幂等。
                DELTE,第一次删除数据,第二次不在再删除,幂等。
        
        
               12. Https和Http区别?
                端口:
                http:80
                https: 443 
                流程:
                - 自定义证书
                - 认证机构
    复制代码

     

    转载于:https://www.cnblogs.com/xyhh/p/10861055.html

    展开全文
  • restful 协议 +面试

    千次阅读 2018-04-09 09:05:00
    restful 协议:面向资源软件架构风格 API 定义 一些预先定义的函数,目的是能够让应用程序或开发人员能够具有访问指定网络资源的能力,而无需关心访问的远吗以及内部的工作机制细节。 RESTful REST与技术...

    restful 协议:面向资源软件架构风格

    API

    定义

    一些预先定义的函数,目的是能够让应用程序或开发人员能够具有访问指定网络资源的能力,而无需关心访问的远吗以及内部的工作机制细节。

    RESTful

    • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
    • REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态
    • REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”
    • 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性
    • 对于REST这种面向资源的架构风格,有人提出一种全新的结构理念,即:面向资源架构(ROA:Resource Oriented Architecture

    概念

    在RESTful架构中认为所有一切都是资源,每个资源有对应的URI标识;
    处理资源的操作有:


    操作名称请求动作名称
    GET获取资源
    POST添加资源
    PUT修改资源(非严格遵行RESTful架构)
    UPDATE/PATCH修改资源(严格遵行RESTful架构)
    DELETE

    删除资源


    客户端通过以上4种http动词,对服务器资源进行操作,实现“表现层状态转化”;
    【注意】
    只是一种架构而不是标准,提供设计原则和约束条件。
    适用于客户端与服务器交互类的软件,这是因为它更加简洁、有层次、更利于实现缓存等机制;

    状态码

    服务器向用户返回的状态吗和提示信息,常见的有以下部分:

    • 2XX:这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
    • 3xx重定向:这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。当且仅当后续的请求所使用的方法是GET或者HEAD时,用户浏览器才可以在没有用户介入的情况下自动提交所需要的后续请求。客户端应当自动监测无限循环重定向(例如:A→B→C→……→A或A→A),因为这会导致服务器和客户端大量不必要的资源消耗。按照HTTP/1.0版规范的建议,浏览器不应自动访问超过5次的重定向。
    • 4xx客户端错误:这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个HEAD请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。
    • 5xx服务器错误:表示服务器无法完成明显有效的请求。这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。这些状态码适用于任何响应方法。
     
    状态码含义备注
    200 OK请求已成功,请求所希望的响应头或数据体将随此响应返回实际响应将取决于所使用的请求方法。在GET请求中,响应将包含与请求的资源相对应的实体。在POST请求中,响应将包含描述或操作结果的实体
    201  Created请求已经被实现,而且有一个新的资源已经一句请求的需要而创建,且其url已经随Location头信息返回  假如需要的资源无法及时创建的话,应当返回‘202 Accepted’
    202Accepted服务器已接受请求,但尚未处理。最终该请求可能会也可能不会被执行,并且可能在处理发生时被禁止。 
    203 Non-Authoritative Information服务器是一个转换代理服务器(transforming proxy,例如网络加速),以200 ok状态码为起源,但回应了原始响应的修改版本自HTTP/1.1起
    204 No Content服务器成功处理了请求,没有返回任何内容   
    205 Reset Content 服务器成功处理了请求,但没有返回任何内容与204响应不同,此响应要求请求者重置文档视图
    206 Partial Content服务器已经成功处理了部分GET请求。类似于FlashGet或者迅雷这类的HTTP。下载工具都是使用此类响应实现断点续传或者将一个大文档分解为多个下载段同时下载。 
    207 Multi-Status代表之后的消息体将是一个XML消息,并且可能依照之前子请求数量的不同,包含一系列独立的响应代码。(WebDAV;RFC 4918)
    208 Already ReportedDAV绑定的成员已经在(多状态)响应之前的部分被列举,且未被再次包含。 
    226 IM Used服务器已经满足了对资源的请求,对实体请求的一个或多个实体操作的结果表示。 
    300 Multiple Choices被请求的资源有一系列可供选择的回馈信息,每个都有自己特定的地址和浏览器驱动的商议信息。用户或浏览器能够自行选择一个首选的地址进行重定向。
    301 Moved Permanently被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个URI之一。 
    302 Found要求客户端执行临时重定向(原始描述短语为“Moved Temporarily”)。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。
    303 See Other对应当前请求的响应可以在另一个URI上被找到,当响应于POST(或PUT / DELETE)接收到响应时,客户端应该假定服务器已经收到数据,并且应该使用单独的GET消息发出重定向。 
    304 Not Modified表示资源未被修改,因为请求头指定的版本If-Modified-Since或If-None-Match。在这种情况下,由于客户端仍然具有以前下载的副本,因此不需要重新传输资源。 
    305 Use Proxy
    被请求的资源必须通过指定的代理才能被访问。Location域中将给出指定的代理所在的URI信息,接收者需要重复发送一个单独的请求,通过这个代理才能访问相应资源。只有原始服务器才能创建305响应。许多HTTP客户端(像是Mozilla和Internet Explorer)都没有正确处理这种状态代码的响应,主要是出于安全考虑。
     
    306 Switch Proxy
    是指“后续请求应使用指定的代理”。
    最新版的规范中,306状态码已经不再被使用。
    307 Temporary Redirect在这种情况下,请求应该与另一个URI重复,但后续的请求应仍使用原始的URI。 与302相反,当重新发出原始请求时,不允许更改请求方法。 例如,应该使用另一个POST请求来重复POST请求 
    308 Permanent Redirect
    请求和所有将来的请求应该使用另一个URI重复。 307和308重复302和301的行为,但不允许HTTP方法更改。 例如,将表单提交给永久重定向的资源可能会顺利进行。
     
    400 Bad Request由于明显的客户端错误(例如,格式错误的请求语法,太大的大小,无效的请求消息或欺骗性路由请求),服务器不能或不会处理该请求。 
    401 Unauthorized类似于403 Forbidden,401语义即“未认证”,即用户没有必要的凭据。该状态码表示当前请求需要用户验证。该响应必须包含一个适用于被请求资源的WWW-Authenticate信息头用以询问用户信息。客户端可以重复提交一个包含恰当的Authorization头信息的请求。 
    402 Payment Required该状态码是为了将来可能的需求而预留的。该状态码最初的意图可能被用作某种形式的数字现金或在线支付方案的一部分,但几乎没有哪家服务商使用,而且这个状态码通常不被使用。如果特定开发人员已超过请求的每日限制,Google Developers API会使用此状态码。 
    403 Forbidden服务器已经理解请求,但是拒绝执行它。如果这不是一个HEAD请求,而且服务器希望能够讲清楚为何请求不能被执行,那么就应该在实体内描述拒绝的原因。当然服务器也可以返回一个404响应,假如它不希望让客户端获得任何信息。与401响应不同的是,身份验证并不能提供任何帮助,而且这个请求也不应该被重复提交。
    404 Not Found
    请求失败,请求所希望得到的资源未被在服务器上发现,但允许用户的后续请求。没有信息能够告诉用户这个状况到底是暂时的还是永久的。假如服务器知道情况的话,应当使用410状态码来告知旧资源因为某些内部的配置机制问题,已经永久的不可用,而且没有任何可以跳转的地址。404这个状态码被广泛应用于当服务器不想揭示到底为何请求被拒绝或者没有其他适合的响应可用的情况下。
     
    405 Method Not Allowed请求行中指定的请求方法不能被用于请求相应的资源。该响应必须返回一个Allow头信息用以表示出当前资源能够接受的请求方法的列表。例如,需要通过POST呈现数据的表单上的GET请求,或只读资源上的PUT请求。 
    406 Not Acceptable请求的资源的内容特性无法满足请求头中的条件,因而无法生成响应实体,该请求不可接受。 
    407 Proxy Authentication Required与401响应类似,只不过客户端必须在代理服务器上进行身份验证。 
    408 Request Timeout请求超时。根据HTTP规范,客户端没有在服务器预备等待的时间内完成一个请求的发送,客户端可以随时再次提交这一请求而无需进行任何更改。 
    409 Conflict表示因为请求存在冲突无法处理该请求,例如多个同步更新之间的编辑冲突。 
    410 Gone表示所请求的资源不再可用,将不再可用。当资源被有意地删除并且资源应被清除时,应该使用这个。在收到410状态码后,用户应停止再次请求资源。但大多数服务端不会使用此状态码,而是直接使用404状态码。 
    500 Internal Server Error通用错误消息,服务器遇到了一个未曾预料的状况,导致了它无法完成对请求的处理。没有给出具体错误信息。 
    501 Not Implemented服务器不支持当前请求所需要的某个功能。当服务器无法识别请求的方法,并且无法支持其对任何资源的请求。 
    502 Bad Gateway作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。 
    503 Service Unavailable由于临时的服务器维护或者过载,服务器当前无法处理请求。这个状况是暂时的,并且将在一段时间以后恢复。如果能够预计延迟时间,那么响应中可以包含一个Retry-After头用以标明这个延迟时间。如果没有给出这个Retry-After信息,那么客户端应当以处理500响应的方式处理它。 
    504 Gateway Timeout作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。注意:某些代理服务器在DNS查询超时时会返回400或者500错误。 

     RESTful API设计

    • API与用户的通信协议,总是使用HTTPs协议
    • 域名 
      • https://api.example.com                         尽量将API部署在专用域名(会存在跨域问题)
      • https://example.org/api/                        API很简单
    • 版本
      • URL,如:https://api.example.com/v1/
      • 请求头                                                  跨域时,引发发送多次请求
    • 路径,视网络上任何东西都是资源,均使用名词表示(可复数)
      • https://api.example.com/v1/zoos
      • https://api.example.com/v1/animals
      • https://api.example.com/v1/employees
    • method
      • GET      :从服务器取出资源(一项或多项)
      • POST    :在服务器新建一个资源
      • PUT      :在服务器更新资源(客户端提供改变后的完整资源)
      • PATCH  :在服务器更新资源(客户端提供改变的属性)
      • DELETE :从服务器删除资源
    • 过滤,通过在url上传参的形式传递搜索条件
      • https://api.example.com/v1/zoos?limit=10:指定返回记录的数量
      • https://api.example.com/v1/zoos?offset=10:指定返回记录的开始位置
      • https://api.example.com/v1/zoos?page=2&per_page=100:指定第几页,以及每页的记录数
      • https://api.example.com/v1/zoos?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序
      • https://api.example.com/v1/zoos?animal_type_id=1:指定筛选条件

     

    • 错误处理,状态码是4xx时,应返回错误信息,error当做key。
      {
          error: "Invalid API key"
      }
    • 返回结果,针对不同操作,服务器向用户返回的结果应该符合以下规范。
    • GET /collection:返回资源对象的列表(数组)
      GET /collection/resource:返回单个资源对象
      POST /collection:返回新生成的资源对象
      PUT /collection/resource:返回完整的资源对象
      PATCH /collection/resource:返回完整的资源对象
      DELETE /collection/resource:返回一个空文档
    • Hypermedia API,RESTful API最好做到Hypermedia,即返回结果中提供链接,连向其他API方法,使得用户不查文档,也知道下一步应该做什么。
      {"link": {
        "rel":   "collection https://www.example.com/zoos",
        "href":  "https://api.example.com/zoos",
        "title": "List of zoos",
        "type":  "application/vnd.yourformat+json"
      }}

     

    关于对rest api的认识

    原来web应用程序时,根据URL不同定位到不同视图函数处理。

    以前我们刚学习写项目时,增删改查需要写到4个url当接口,而而现在我们只需要写一个url

    rest是一种规范:面向资源

    #  当我们来介绍rest 规范时候可以从url的顺序来介绍
    #     http://api.luffycity.com/v1/users
    #    1 http :协议
    #    2 api.luffycity.com :域名
    #    3 v1:版本
    #    4 users:urls中是名词
    
    5:发送过去有不同的请求方式
        即:method不同执行不同函数:get/post/delete/put/patch
    
    6:返回状态码
        常见状态码:200/301/302/404/403/500
    
    7:错误信息:
        {
            msg: '用户名或密码错误'
        }
            def index(request):
            ret = {'code':1000,'data':None}
                return HttpResponse('xxx',status=200)
    8:返回值:
        http://api.luffycity.com/v1/users
        http://api.luffycity.com/v1/users/1
    
    9:条件
    http://api.luffycity.com/v1/users?page=1&size=10
    PS: 主键ID体现在URL上
    
    10 hyperlink
    {
        id: '老司机',
        age: 18,
        group: http://www.luffycti.com/api/v1/group/1/
    }     

    django rest framework

    10个组件(重点需要了解源码)

    按请求进来的顺序
    1:路由
        请求进来要走路由
    2:视图
        路由写完就到了视图
    3:版本
    请求进去源码dispatch里面有4个方法
    4:认证
    5:权限
    6:节流(频率)
    7:解析器
    发数据需要转换数据类型
    8:序列化
        需要校验数据(序列化有2个功能:序列化,校验)
    9:分页
    10:渲染器

     

    知识点

    加括号的三种情况
    类
    函数或者加方法执行
    对象

     

    源码后的心得

    1:封装的思想:

      例如:将认证组件封装request里面,接着就只要requesst。user就能

    2:开放,封闭思想(只要改配置即生效)

    3:配置:中间件配置

    问题:发送邮件、短信、微信提醒

     

      

    # 文件启动会先运行init文件
    import settings
    import importlib
    
    def send_xxxx(content):
        for path in settings.NOTIFY_LIST:
            # 'notify.email.Email',
            # 'notify.msg.Msg',
            # 'notify.wechat.Wechat'
            # module_path模块路径
            module_path,class_name = path.rsplit('.',maxsplit=1)
            # importlib.import_module("notify.email")
    
            # 根据字符串导入模块:notify.email
            # importlib
            module = importlib.import_module(module_path)
    
            # 根据类名称去模块中获取类
            cls = getattr(module,class_name)
    
            # 根据类实例化
            obj = cls()
            obj.send(content)
    init。py
    class Email(object):
        def __init__(self):
            pass
        def send(self):
            pass
    email.py
    from notify import send_xxxx
    def run():
        send_xxxx('报警')
    
    if __name__ == '__main__':
        pass
    app
    NOTIFY_LIST = [
        'notify.email.Email',
        # 'notify.msg.Msg',
        'notify.wechat.Wechat',
        'notify.wechat.Wechat',
    ]
    settings

     

    question:你觉得python基础中哪些知识比较重要?
    answer:我现在想到的,列表生成式、反射以及面向对象都比较重要,因为我最近在研究django rest-framework的源码,就发现这些知识在源码里面全部都用到了,比如说CBV是通过反射实现的,
    比如说认证,原来我对封装的认识还不太够,后来看了这个源码,它里面有一种封装的思想就是把认证这个类封装到了request里面,以后要去用的时候,只需要调用它的方法,由它里边具体完成这个功能
     
     
    开放封闭原则:
    只对配置开放,可以任意修改配置文件,只要修改配置文件,就生效了;
    封闭,指的是原代码封闭,添加功能和删除功能的时候,最好不要去改代码,只要改配置就能生效;

     

     

    转载于:https://www.cnblogs.com/jassin-du/p/8757245.html

    展开全文
  • 2019年常见Elasticsearch 面试题答案详细解析(下)

    千次阅读 多人点赞 2019-12-26 15:51:03
    1.Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎。 (1)查询 : Elasticsearch 允许执行和合并多种类型的搜索 — 结构化、非结构化、地理位置、度量指标 — 搜索方式随心而变。 (2)分析 : ...
  • 作者 :Arain | 来源于:程序员面试 Spring Boot 是微服务中最好的 Java 框架. 我们建议你能够成为一名 Spring Boot 的专家。本文精选了三十五个常见的Spring Boot知识点,祝你一臂之力! 问题一 Spring Boot、...
  • 转自:http://www.spring4all.com/article/1445   原文链接:... 作者: Javin Paul 译者:康仔 Java开发者在面试中会问到哪些关于REST和Spring MVC问题呢?点这里可以了解到排名前20个的...
  • SpringBoot:三十五道SpringBoot面试题及答案!

    万次阅读 多人点赞 2019-05-15 23:08:32
    SpringBoot面试
  • 同时它还支持RESTful编程风格的请求。 2.什么是MVC模式? 对请求参数进行重新编码,ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。 String userName = new String(request.getParamter(...
  • 史上最全面Java面试汇总(面试题+答案)

    万次阅读 多人点赞 2018-07-06 14:09:25
    JAVA面试精选【Java基础第一部分】 JAVA面试精选【Java基础第二部分】 JAVA面试精选【Java基础第三部分】 JAVA面试精选【Java算法与编程一】 JAVA面试精选【Java算法...阿里历年面试题 Java中高级面试题 数据...
  • 什么是RESTful 1.前后端分离的意义和方式 2.什么是RESTful 3.如何设计RESTful 二、什么是前后端分离?有哪些优点? 后端只负责提供数据接口,不再渲染模板,前端获取数据并呈现 1.前后端解耦,接口复用(前端和...
  • 大家好,过去两周来,我一直在与Spring教程共享一些REST,今天,我将向申请Web开发人员角色的Java开发人员共享一些常见的Spring和REST面试问题。 由于Spring Framework是用于开发Java Web应用程序和RESTful Web ...
  • springmvc面试题

    千次阅读 2015-05-08 18:36:08
    Spring3.0 MVC 个人觉得很好,很人性化,直接用annotation方式+restful,很舒服,controller的代码越来越干净了,各个传入的参数也完全是分离的,而不是一对参数放在一起,这点我觉得很舒服。  Java代码 ...
  • 面试 restfulWe have written a lot on Restful Web Services, today we will look into Restful web service interview questions and answers. 我们已经在Restful Web Services上写了很多文章,今天我们将研究...
  • REST是“REpresentational State Transfer”的缩写,可以翻译成“表现状态转换”,但是在绝大多数场合中我们只说REST或者RESTful。 REST在我看来是一种很笼统的概念,它代表一种架构风格。“面向资源的架构(ROA:...
  • 前端开发面试题.html

    2018-03-30 12:08:05
    非常全面的前端开发面试题: HTML&CSS;: 对Web标准的理解(结构、表现、行为)、浏览器内核、渲染原理、依赖管理、兼容性、CSS语法、层次关系,常用属性、布局、选择器、权重、盒模型、 Hack、CSS预处理器、CSS3...
  • restful规范面试总结

    千次阅读 2019-10-06 05:28:11
    1.url链接设计:采用https方式,有api关键字,有版本需要明确版本,请求链接用名词来表示资源,具体的操作方式采用请求方式来确定2.url响应数据设计:需要明确 状态码、错误信息、成功结果,子资源一般用子资源的...
  • Spring面试题以及答案整理【最新版】Spring高级面试题大全(2021版),发现网上很多Spring面试题都没有答案,所以花了很长时间搜集,本套Spring面试题大全,汇总了大量经典的Spring程序员面试题以及答案,包含Spring...
  • Java面试RESTful风格接口

    千次阅读 2019-07-08 21:55:13
    1.Restful风格接口简介: 答:Restful这个词,是一个外国人Roy Thomas Fielding在2000年提出的。这个Fielding将他对互联网软件的架构原则,定名为REST,即Representational State Transfer的缩写。这个词组翻译为...
  • 面试题】-java分布式及微服务面试题汇总

    万次阅读 多人点赞 2019-05-06 16:35:38
    看过一道京东的面试题: 请说一说用zookeeper做注册中心和Eureka做注册中心的不同之处. 可以从CAP的角度进行分析,zk做注册中心是满足CP的,spring cloud是满足AP的,具体的可以展开阐述. 2.BASE理论 BASE是...
  • Dubbo相关面试题

    千次阅读 2020-05-09 11:00:14
    想往高处走,怎么能不懂 Dubbo?...下面我为大家准备了一些 Dubbo 常见的的面试题,一些是我经常问别人的,一些是我过去面试遇到的一些问题,总结给大家,希望对大家能有所帮助。 1、Dubbo是什么? Dubbo是阿
  • 转自:Dubbo面试题及答案 想往高处走,怎么能不懂 Dubbo? Dubbo是国内最出名的分布式服务框架,也是 Java 程序员必备的必会的框架之一。Dubbo 更是中高级面试过程中经常会问的技术,无论你是否用过,你都必须熟悉...
  • 经验总结、自己出的面试题及参考

    千次阅读 2016-03-18 13:19:44
    hashMap、hashtable、ConcurrentHashMap、hashset的区别  hashMap   1)允许空值和空健  2)线程不安全,效率高于hashtable  3)HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey ...
  • dubbo面试题

    千次阅读 2020-01-02 17:46:55
    dubbo面试题 1.Dubbo 有几种配置方式? XML 配置 注解配置 属性配置 Java API 配置 详细参见官方文档:http://dubbo.apache.org/zh-cn/docs/user/configuration/xml.html 比如,xml配置 provider.xml 示例 <...
  • Python面试题大汇总

    千次阅读 2018-07-22 11:57:55
    hash算法的原理 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构可以...
  • 2019年常见ElasticSearch 面试题解析(上)

    千次阅读 多人点赞 2019-12-25 19:39:24
    它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。ElasticSearch用于云计算中,能够达到...
  • 2021年SpringCloud面试题及答案汇总

    千次阅读 2021-05-13 08:13:27
    SpringCloud最新2021年面试题及答案,汇总版 1、 Spring Cloud和各子项目版本对应关系 2、 什么是客户证书? 3、 Spring Cloud OpenFeign 4、 在使用微服务架构时,您面临哪些挑战? 5、 springcloud核⼼组件及其作...
  • Dubbo面试题

    万次阅读 多人点赞 2019-02-15 16:55:31
    Dubbo面试题 springboot面试题 SQL常见的面试题 Linux常见的面试题 1、Dubbo是什么? Dubbo是阿里巴巴开源的基于 Java 的高性能 RPC 分布式服务框架,现已成为 Apache 基金会孵化项目。 dubbo是...
  • Redis面试题及答案【2021最新版】Dubbo面试题大全(2021版),发现网上很多Dubbo面试题都没有答案,所以花了很长时间搜集,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,面试经验...
  • 最近梳理2021最新 Spring 面试题 全家桶【附答案解析】,包含了 Java基础、Spring、SpringMVC、Redis、SpringCloud、设计模式、等多个类型。 今天这篇是关于 Spring 全家桶面试题,总结了 110 道经典问题。 这套...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,114
精华内容 3,645
关键字:

restful面试题