web是怎么工作的?

URL:https://www.google.com 域名

首先访问最近的DNS服务器 domain name service

DNS记录了这个域名的ip地址是什么

浏览器向该ip地址发送http/https(传输协议)请求。每台服务器/计算机联网都需要一个ip地址。通过ip地址就能找到该服务器/计算机。

服务器收到请求,将请求递交给80端口监听到http server(apache, unicorn, gunicorn, uwsgi)

http server将请求转发给web application(web application framework: Django, Ruby on Rails, Nodejs, Flask)

web application处理请求

  • 根据当前路径找到逻辑处理模块

  • 根据用户请求(GET + POST)决定如何获取/存放数据

  • 从数据存储服务(数据库或者文件系统)中读取数据

  • 组织数据成一张html网页作为返回结果

浏览器得到结果展示给用户

 

浏览器 <--> DNS                            web server

   <--------------> [http server <--> web application] <--> database

 

浏览器 <--> DNS                                           

   <--> firewall <--> load balancer<-->web server <--> database

                   <-->web server <--> database

             async server(message queue)         memcache

什么是API? application programming interface

提供一些方法函数功能给别人用,别人通过直接函数调用或者http等方式进行调用,得到了返回结果,这就是API。

api设计

https://www.xx.com/api... 目标获得当前登陆用户在某给某个题的所有提交记录

/api/submissions/?problem_id=1000 #后台用当前用户去筛选

不能带user_id,可以被篡改,别人可以登陆

Restful API, 你要获取的数据是什么,一级目录就是什么。使用HTTP的四个动作(POST,DELETE,GET,PUT)来代表对数据的增删查改

所有的筛选条件,创建参数,都放在http的参数里

 

Design News Feed API

设计news feed list的web api请求格式

GET https://www.facebook.com/api/newsfeed/

GET https://api.facebook.com/newsfeed/

 

设计API的返回格式:structured data(json / xml)

返回界面:html

 

设计翻页pagination:

方法1:/api/newsfeed/?page=1

缺点:如果有新数据被插入,翻到下一页可能会看到上一页的内容

方法2:/api/newsfeed/?max_id=xxx (最新的xxx个,id<=max_id的数据)

如何判断有没有下一页?每次多取一个数据,如果取到,把这个数据作为next_max_id返回给前端

mentions的数据格式?<a href="/users/someone/">@someone</a>

缺点1:需要预防javascript injection attack

缺点2: api无法被mobile端共享

mobile显示链接不用<a>

缺点3:url可能会改动

<user username="someone">Hello World</user>

 

posted on 2024-01-12 09:12  dddddcoke  阅读(2)  评论(0编辑  收藏  举报