转载:写给产品经理的技术分享(后端)-----更是自己需要了解

2023-10-10 12:30

本文主要是介绍转载:写给产品经理的技术分享(后端)-----更是自己需要了解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载说明:本文转自“知乎”的用户“lemon”,文章是讲了关于产品经理在处事所需要考虑的事,其文章很有意境,读时不自觉的就会想到自己,如果是我的话,该怎样处理,遂转载至我的博客中,希望能时常读起,在此感谢!
写在前面

这篇文章主要分享后端、以及前后端交互相关知识及其在产品工作中的应用。

1 简单谈一下API
1.1 API的种类以及定义

API这个词,我想所有的产品经理都听过无数次。
  上一篇分享中,我们提及了一种用于前后端通信的API,其作用方式之一是:前端随请求将要传递的数据打包并发送到服务器,服务器执行相应处理程序,并将程序的输出发回前端。
  前端通常使用这种方式从服务器请求最新数据,因为这些工作涉及到前后端配合,因而在实际工作中还需要产出相应的API文档(甚至于在一些公司是由产品经理去输出API文档),指明随请求发送的参数、请求方法,传回的参数等。

除了这种用于前后端通信的API,还有很多其他类型的API。例如我们调用支付宝、微信等第三方应用的API,从而为自己的应用增加支付、分享等功能。

在《headfirst python》这本书中,通过一个具体的例子,更加透彻的讲解了API的由来:
  在编程中,通过定义函数,可以减少重复代码;
  将函数保存在一个脚本文件中,使之转化为模块;
  将模块放入文件夹,同时增加元数据文件,就可以将模块打包准备发布; 
  在web上发布你的文件(也就是API),以供他人下载、安装和使用,其他开发者可以使用API所提供的函数为产品增加功能。
  为了让更多人以不同方式更加灵活的调用API,我们在定义函数时可以使用可选参数(也就是为参数提供默认值),通过使用参数控制函数的行为与表现。

1.2 在产品工作中的应用

即便不需要写API文档,产品经理对于API及其调用方式也需要有基本的认知,进行考虑并体现在产品设计方案或者PRD中。
  以调用QQ分享接口为例进行说明:我们需要查看QQ开放平台API调用说明,明确各种API调用的效果以最终确定要选取的API,以及该API需要自定义哪些参数。
  下图是我的PRD的截图,指明了调用的API、调用效果以及需要自定义的参数值。

在这里插入图片描述

2 web开发
2.1 web应用如何工作

这里再大概陈述一下:
  (1)用户在浏览器执行操作,比如输入URL或者点击一个跳转链接
  (2)浏览器将用户动作转换为一个web请求,通过互联网发送到服务器
  (3)服务器收到请求并进行处理。在这里,如果请求的是静态内容,服务器会找到相应资源并把它作为响应返回给浏览器;如果请求的是动态内容(也就是需要运行程序才能输出),那么服务器会找到并运行相应服务端程序,并将程序的输出作为响应发给浏览器。这个生成动态内容的过程称为通用网关接口(CGI),符合这个标准的服务端程序称之为CGI脚本
  (4)浏览器接收到web响应,通过改变DOM将之显示在用户的屏幕上。

2.2 采用MVC设计web应用

MVC即模型-视图-控制器(model-view-controller),这是一种常用的开发模式,有助于将代码分解为易于管理、维护、扩展的功能模块,其中:

模型(model)用于封装与应用程序的业务逻辑相关的数据以及对数据的处理方法;

视图(view)代码提供直接与用户交互的界面;

控制器(controller)代码起到组织协调作用,将模型代码和视图代码粘合起来,用于处理响应,控制应用程序的流程。

在互联网早期,后端做了绝大部份工作,也就是模型、视图、控制器代码都由后端完成,后端会建立数据模型,通过视图代码对HTML标记进行拼接,通过控制器代码将模型数据填充到页面视图中并打印出来,这些输出作为响应发回浏览器,浏览器再将页面显示出来。
  这种模式的缺点在于,每次请求都要返回一个新页面,这会降低浏览器的响应性;另外,许多前端页面存在大量重复代码,但是还要一遍一遍重复生成。

而现在,这一情况已经改变,视图代码和部分控制器代码已经运行在前端,模型和部分控制器代码则运行在后端。
  在这种模式下,后端不再需要每次都返回一个完整页面,只需传送数据(通常为JSON格式);前端定义好页面样式,从服务端获取数据并根据业务逻辑填充到页面中。这可以提高页面的响应速度,并且高效利用了不同页面的重复代码。

举个例子,比如我们的网站有一个这样的页面,用户输入某一个歌手,我们的网站就为其展示该歌手的所有歌曲名。那么前后端分别需要编写哪些代码模块呢?

前端需要编写视图(View)相关代码,提供一个表单页面让用户输入歌手名;前端还需要编写一部分控制器(controller)代码,用于创建请求,随请求将用户的输入以键值对的形式(例如 singer:“周杰伦”)发送到服务端,另外还需要编写数据到达时的处理程序,在服务端数据到达时,对歌曲数据进行处理并以一定的结构增加到页面中。

后端需要有一个数据模型(model),该模型以一定的结构存储了许多歌手及其歌曲数据,还定义了获取业务所需数据的方法或者说函数(在这个例子中就是通过歌手的名字,获取该歌手的所有歌曲);后端还需要有一个控制层(controller),用于处理前端发来的请求并进行响应,在这里就需要获取用户输入的歌手名(同样是使用键获取对应的值),调用数据模型及相应函数,并将歌手名传入函数,该函数会获取模型数据并进行处理,最终输出该歌手对应的歌曲列表,作为响应发回前端。

2.3 在产品工作中的应用

通过以上的例子,我们就可以看出前后端在软件开发中角色的分工与配合方式,知道了目前前后端的分工原则后,我们在和前后端的沟通中就应该相应有所侧重。
  着重像前端展示页面的结构、样式、交互,指明页面数据来源;着重向后端展示,哪些数据来源于后端,这些数据的计算规则(如上文所言,复杂的数据逻辑运算一般发生在服务端),和现有数据的关联等。

了解前后端的分工不仅可以帮助我们更好的推动产品方案落地,还有助于在出现bug时,更加快速定位到问题来源与对应开发人员。

在这里还要强调一下,无论是“模型-视图-控制器”这一开发模式,还是上述的前后端的分工方式,都不是唯一正确答案,这种划分也不是非黑即白的。我们要明确其间的区别,但更要知道其中的联系。

3 关于数据库
3.1 简介

前面已经提到了数据在前后端之间的传递,在上一篇讲本地存储的时候也提及了可以使用local storage(本地存储)、session storage(会话存储)将数据存储在浏览器本地。但是绝大多数用户数据、内容信息是存储在服务端的数据库中。

数据库的类型主要有关系型数据库和非关系型数据库。关系型数据库是一种基于关系模型的数据库,这种关系模型是对现实中实体关系的抽象表达。非关系型数据库,在存储的数据结构上没有那么严格的约束和规范,以更加灵活的方式定义数据存储。

常用的数据库管理系统(软件)包括Oracle、MySQL、MongoDB等。可以这样理解数据库和数据库管理软件的关系,数据库就是一个类似Excel文件的数据文件,里面包含很多的数据表,这些文件会放在web应用的根文件夹下,以便在运行程序时进行访问;数据库管理系统类似于Excel软件,可以可视化的查看并管理数据库文件。

在这里我们仅对关系型数据库进行讲解。

3.2 如何与数据库交互

这里以python编程为例,讲解服务端程序与数据库如何进行交互。python的数据库API提供了一种操作数据库的标准机制,如下图(注意这并不是与数据库进行交互的唯一方式)
在这里插入图片描述

以上流程翻译成python代码是这样的

# 导入sqlite3(sqlite3,是python预装的数据库管理系统)
import sqlite3
# 建立与数据库的连接(test.sqlite是示例数据库)
connection=sqlite3.connect('test.sqlite')
# 建立数据游标
cursor=connection.cursor()
# 执行一些SQL操作(SQL,即结构化查询语言,可以使用SQL访问、管理和查询关系型数据库的数据)
cursor.execute("""SELECT  DATE ('NOW')""")
# 提交修改
connection.commit()
# 关闭连接
connection.close()

通过将上述模式的代码加入python程序中,我们就可以对数据库进行操作。

3.3 设计并建立数据库

关系型数据库是由一张张相互关联的数据表构成的,对数据库的设计也就是设计数据表的结构和关联。我们现在来设计一个数据库,并使用python真正建立这个数据库。

现在我们设计了一个名为runningdata的数据库,里面包含两张数据表,一张表记录每个用户的基本信息(姓名和出生日期),另一张表记录每个用户的跑步时间数据。两张数据表分别如下:
在这里插入图片描述

可以看到,这两张表通过用户ID进行关联,这种表的结构和关联应该是具有逻辑意义、现实意义、业务导向、支持扩展的。

上面是对数据表的设计,那么如何通过python建立上面的数据表,并进行数据插入和查询等操作呢?

首先套用3.2中的流程,建立与数据库的连接、创建数据游标,然后使用create语句创建两个数据表,使用SELECT语句对数据表进行查询并获取结果,使用INSERT语句分别向表增加数据(其中用户ID可以自动生成,我们使用第一个表生成的用户ID填充第二个表,使之关联起来),然后提交修改并关闭连接。建立后的数据库一般长这个样子:在这里插入图片描述

3.4 将数据库集成到web应用

上面讲MVC(模型-视图-控制器)时我们提到,模型代码用来存储并提供数据。所以我们只需在模型(model)中编写上述代码,让其帮助我们创建数据库,并定义相关的数据处理方法;这样在控制器代码进行响应时就可以调用该方法,使之返回我们需要的数据。

除了获取数据外,通过在控制器代码中执行插入数据的操作,我们也可以将随请求发来的用户输入数据添加到数据模型中。

3.5 在产品工作中的应用

产品经理对于数据库的设计方式、作用方式有一定的了解,有助于评估产品功能的实现对现有数据库的影响,以及新的设计对原有数据的兼容性问题。

另一方面,现在的产品设计往往需要参考大量的用户行为数据,进行下一步优化。这些用户数据往往存储在数据库中,产品经理有时需要使用SQL语句对数据库进行查询,因而对于数据库的了解也是大有帮助的。

写在后面

本文主要讲解了三个方面的内容:
  (1)关于API的基本知识
  (2)web应用的工作方式、开发模式
  (3)数据库的简介、操作方法、应用方式。通过这些内容简单介绍了服务端的基本知识,以及与产品工作的联系。
  我个人对于服务端技术的学习是通过《Head First Python》这本书,因此写这篇文章,也算是抛砖引玉。后端的内容非常之庞大,我虽诚惶诚恐,还是大胆把自己有所感悟的写了下来,欢迎大家与我探讨或者批评指正。

这两篇文章讲解了web应用开发所涉及的基本知识,希望大家看完之后有所收获,也建议产品经理们去看一下技术相关的书籍,甚至于写一个自己的应用,体会一下开发的过程,思考产品设计与技术实现的关系,思考产品经理与开发人员的协作方式。

这篇关于转载:写给产品经理的技术分享(后端)-----更是自己需要了解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/180456

相关文章

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

将Python应用部署到生产环境的小技巧分享

《将Python应用部署到生产环境的小技巧分享》文章主要讲述了在将Python应用程序部署到生产环境之前,需要进行的准备工作和最佳实践,包括心态调整、代码审查、测试覆盖率提升、配置文件优化、日志记录完... 目录部署前夜:从开发到生产的心理准备与检查清单环境搭建:打造稳固的应用运行平台自动化流水线:让部署像

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

Python中处理NaN值的技巧分享

《Python中处理NaN值的技巧分享》在数据科学和数据分析领域,NaN(NotaNumber)是一个常见的概念,它表示一个缺失或未定义的数值,在Python中,尤其是在使用pandas库处理数据时,... 目录NaN 值的来源和影响使用 pandas 的 isna()和 isnull()函数直接比较 Na

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

业务中14个需要进行A/B测试的时刻[信息图]

在本指南中,我们将全面了解有关 A/B测试 的所有内容。 我们将介绍不同类型的A/B测试,如何有效地规划和启动测试,如何评估测试是否成功,您应该关注哪些指标,多年来我们发现的常见错误等等。 什么是A/B测试? A/B测试(有时称为“分割测试”)是一种实验类型,其中您创建两种或多种内容变体——如登录页面、电子邮件或广告——并将它们显示给不同的受众群体,以查看哪一种效果最好。 本质上,A/B测