小编nor*_*tpy的帖子

REST API最佳实践:如何接受参数值列表作为输入

我们正在推出一个新的REST API,我想要一些关于如何格式化输入参数的最佳实践的社区意见:

现在,我们的API非常以JSON为中心(仅返回JSON).关于我们是否想要/需要返回XML的争论是一个单独的问题.

由于我们的API输出是以JSON为中心的,我们一直在走一条路,我们的输入有点以JSON为中心,我一直在想这可能对某些人来说很方便,但总的来说很奇怪.

例如,要获得一些产品详细信息,我们可以立即提取多个产品:

http://our.api.com/Product?id=["101404","7267261"]
Run Code Online (Sandbox Code Playgroud)

我们应该简化为:

http://our.api.com/Product?id=101404,7267261
Run Code Online (Sandbox Code Playgroud)

或者有JSON输入方便吗?更多的痛苦?

我们可能希望接受这两种风格,但这种灵活性是否会导致更多的混乱和头痛(可维护性,文档等)?

更复杂的情况是我们想要提供更复杂的输入.例如,如果我们想在搜索上允许多个过滤器:

http://our.api.com/Search?term=pumas&filters={"productType":["Clothing","Bags"],"color":["Black","Red"]}
Run Code Online (Sandbox Code Playgroud)

我们不一定要将过滤器类型(例如productType和颜色)作为请求名称,如下所示:

http://our.api.com/Search?term=pumas&productType=["Clothing","Bags"]&color=["Black","Red"]
Run Code Online (Sandbox Code Playgroud)

因为我们想要将所有过滤器输入组合在一起.

最后,这真的很重要吗?可能有很多JSON实用程序,输入类型并不重要.

我知道我们的JavaScript客户端对API进行AJAX调用可能会欣赏JSON输入以使他们的生活更轻松.

api rest

385
推荐指数
5
解决办法
52万
查看次数

REST API - 在单个请求中批量创建或更新

让我们假设有两个资源Binder,并Doc具有关联关系意味着DocBinder自己站.Doc可能属于也可能不属于BinderBinder可能为空.

如果我想设计一个REST API,允许用户发送一个Docs 的集合,在单个请求中,如下所示:

{
  "docs": [
    {"doc_number": 1, "binder": 1}, 
    {"doc_number": 5, "binder": 8},
    {"doc_number": 6, "binder": 3}
  ]
}
Run Code Online (Sandbox Code Playgroud)

对于每个文档docs,

  • 如果doc存在则将其分配给Binder
  • 如果doc不存在,请创建它然后分配它

我真的很困惑这应该如何实现:

  • 使用什么HTTP方法?
  • 必须返回什么响应代码?
  • 这甚至适合REST吗?
  • URI怎么样?/binders/docs
  • 处理批量请求,如果一些项目引发错误但另一个项目通过该怎么办.必须返回什么响应代码?批量操作应该是原子的吗?

api rest

80
推荐指数
4
解决办法
8万
查看次数

HTML:更改文本字符串中特定单词的颜色

我有以下消息(略有变化):

"参加比赛到2011年1月30日,你可以赢得最多★ - 包括惊人的夏季旅行!"

我目前有:

<p style="font-size:14px; color:#538b01; font-weight:bold; font-style:italic;">
Run Code Online (Sandbox Code Playgroud)

格式化文本字符串,但想要将"2011年1月30日"的颜色更改为#FF0000,将"summer"更改为#0000A0.

如何使用HTML或内联CSS严格执行此操作?

html css text inline colors

79
推荐指数
7
解决办法
42万
查看次数

django-rest-framework 3.0在嵌套的序列化程序中创建或更新

使用django-rest-framework 3.0并拥有以下简单模型:

class Book(models.Model):
    title = models.CharField(max_length=50)


class Page(models.Model):
    book = models.ForeignKey(Books, related_name='related_book')
    text = models.CharField(max_length=500)
Run Code Online (Sandbox Code Playgroud)

并且给出了这个JSON请求:

{
   "book_id":1,
   "pages":[
      {
         "page_id":2,
         "text":"loremipsum"
      },
      {
         "page_id":4,
         "text":"loremipsum"
      }
   ]
}
Run Code Online (Sandbox Code Playgroud)

如何编写嵌套的序列化程序来处理此JSON,并为page给定的每个JSON book创建新页面或更新(如果存在).

class RequestSerializer(serializers.Serializer):
    book_id = serializers.IntegerField()
    page = PageSerializer(many=True)


class PageSerializer(serializers.ModelSerializer):
    class Meta:
        model = Page
Run Code Online (Sandbox Code Playgroud)

我知道用一个实例化序列化器instance会更新当前的序列化器,但我应该如何在create嵌套序列化器的方法中使用它?

python django serialization json django-rest-framework

71
推荐指数
1
解决办法
3万
查看次数

如何将csv数据导入django模型

我有一些CSV数据,我想使用示例CSV数据导入django模型:

1;"02-01-101101";"Worm Gear HRF 50";"Ratio 1 : 10";"input shaft, output shaft, direction A, color dark green";
2;"02-01-101102";"Worm Gear HRF 50";"Ratio 1 : 20";"input shaft, output shaft, direction A, color dark green";
3;"02-01-101103";"Worm Gear HRF 50";"Ratio 1 : 30";"input shaft, output shaft, direction A, color dark green";
4;"02-01-101104";"Worm Gear HRF 50";"Ratio 1 : 40";"input shaft, output shaft, direction A, color dark green";
5;"02-01-101105";"Worm Gear HRF 50";"Ratio 1 : 50";"input shaft, output shaft, direction A, color dark green";
Run Code Online (Sandbox Code Playgroud)

我有一些名为Product的django型号.在产品还有像一些领域name,description …

python csv django export django-models

60
推荐指数
9
解决办法
10万
查看次数

发布数据时如何检查名称/值对是否存在?

我无法找到做我想做的事情的正确语法.如果没有名称/值对,我想做点什么.这是我视图中的代码:

if (!request.POST['number']):
    # do something
Run Code Online (Sandbox Code Playgroud)

完成上述事情的正确方法是什么?我尝试这个时遇到语法错误.

python django

24
推荐指数
2
解决办法
3万
查看次数

国家模式和警卫

更新:

状态模式可能是解决此问题的错误方法.因此,欢迎任何其他模式.基本上我正在寻找一种方法来为每个州提供保护条件,同时拥有干净且可维护的代码.guard conditions如果条件不满足,前端侧路由系统如emberjs,ui-router和react-router如何实现以避免进入特定状态?


我想通过使用State Pattern来实现一个有限状态机,但我无法绕过它.简而言之就像:

If error -> error state
If A && B && C -> second state
If only A -> first state
Run Code Online (Sandbox Code Playgroud)

在任何状态下,出错时,我们都会进入错误状态.输入(事件)A,B和C可能以任何顺序到达,但如果它们全部通过,我们将进入第二状态.如果只有输入A适用,那么我们进入第一状态.

以下状态图取自Martin Fowler的领域特定语言书.

DSL

在描述中他说:

格兰特小姐在她的卧室有一个秘密隔间,通常是锁定和隐藏的.要打开它,她必须关上门,然后打开胸口的第二个抽屉,按顺序打开她的床头灯.完成这些后,秘密小组将解锁,以便她打开.

我要强调,这turning lightopening 2nd drawer在发生任何顺序.与A,B和C相同

基于@SQLPolice的评论和书,我画了这个:

在此输入图像描述

但问题是,我可能有(A && B && C && D && D && E).在这种情况下,拥有所有组合临时状态将是麻烦的.

state design-patterns state-machine state-diagram

14
推荐指数
1
解决办法
811
查看次数

函数表达式的流泛型类型(箭头函数)

我通常会尝试将流函数类型与其实现分开.我写的时候可读性稍高一些:

type Fn = string => string;
const aFn: Fn = name => `hello, ${ name }`;
Run Code Online (Sandbox Code Playgroud)

而不是:

const aFn = (name: string): string => `hello, ${ name }`;
Run Code Online (Sandbox Code Playgroud)

使用泛型类型时,我们可以写:

const j= <T>(i: T): T => i;

const jString: string = j('apple'); // ?
const jNumber: number = j(7);       // ?
Run Code Online (Sandbox Code Playgroud)

但是如何将这种类型与函数表达式分开?

type H<T> = (input: T) => T;
const h:H<*> = i => i;              // --> WHAT SHOULD GO FOR '*'?

const hString: string = h('apple'); // X error …
Run Code Online (Sandbox Code Playgroud)

javascript generics parameterized-types flowtype arrow-functions

13
推荐指数
1
解决办法
1842
查看次数

Django Postgres ArrayField vs One-to-Many关系

对于我的数据库中的模型,我需要为特定字段存储大约300个值.如果我使用Postgres特定的ArrayField而不是具有One-to-Many关系的单独表,那么在查询性能简单性方面会有什么缺点?

django postgresql django-models

12
推荐指数
1
解决办法
1498
查看次数

Chrome Dev Tool跟踪DOM在交互时的变化

在Chrome开发者工具元素的标签中,如果通过单击按钮属性更改(class="menu-item"- > class="menu-item active"),您可以在元素上看到指示更改的紫色闪光.这非常有用,但在大型文档中,您必须深入扩展所有元素才能看到发生了什么.

有没有什么方法可以在发生交互时记录/列出所有DOM更改?不是专门用于Chrome,但任何其他工具都会很棒.将其视为diff交互之前和之后的交互,但特定于CSS.

html css google-chrome-devtools

9
推荐指数
2
解决办法
2617
查看次数