我很想知道人们在为他们的Web应用程序构建RESTful(或准RESTful)API时采取了哪些方法.
一个实际的例子:
假设您有一个基于浏览器的传统Web应用程序,它在所有表单上都使用CSRF保护.浏览器中显示的每种形式都包含一个带有CSRF保护令牌的隐藏输入.提交表单后,如果此输入与令牌的服务器端版本不匹配,则表单被视为无效.
现在假设您希望将Web应用程序公开为API(可能使用JSON而不是HTML).传统上,在发布API时,我认为事务是单方面的(意味着API使用者基于发布的API构建请求,而不是首先请求表单,然后使用返回的表单构建请求).
当像CSRF保护因素这样的事情时,"单边"方法就会崩溃.需要将CSRF保护令牌包含在API消费者发送的任何POSTS/PUTS/DELETES中.
我一直在努力思考如何最好地解决这个问题.每次需要进行API调用时请求一个表单看起来很尴尬(特别是在处理异步操作时),但我自己想到的所有其他替代方案似乎都破坏了CSRF保护(或至少打破了它的漏洞) ),这是不可接受的.
你们中有谁对此有所了解吗?
谢谢.
(并不是说它应该太重要,因为问题是概念和平台不可知的,但我正在处理传统的LAMP堆栈并使用Symfony 1.4作为我的应用程序框架.我的目标是发布一个JSON格式的Web API,允许开发人员使移动/桌面应用程序与现有的Web应用程序相得益彰.)
我正在为iPhone创建一个自定义开/关切换开关(类似于标准开关),我正处于设置滑块蒙版[[myView layer] setMask:maskLayer]
的位置,但调用设置了蒙版图层的相对位置.它掩蔽的层,而不是相对于掩模层的容器层.对于此特定情况,需要相对于其包含图层设置遮罩层的位置,因为切换滑块将在遮罩下方移动并且遮罩应保持静止.
无需为蒙版和切换滑块组件设置动画以实现所需效果,任何人都知道如何使其工作?这是我到目前为止所得到的:
CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddEllipseInRect(path, nil, CGRectMake(0, 0, 13, 13));
CGPathAddEllipseInRect(path, nil, CGRectMake(30, 0, 13, 13));
CGPathAddRect(path, nil, CGRectMake(6, 0, 32, 13));
[maskLayer setPath:path];
[maskLayer setFillColor:[[UIColor greenColor] CGColor]];
[[self layer] addSublayer:maskLayer];
[maskLayer setPosition:CGPointMake(2, 2)];
[self addSubview:toggleView];
[[toggleView layer] setMask:maskLayer];
Run Code Online (Sandbox Code Playgroud) 有哪些RESTful方法可以在Django中的多页表单页面之间进行转换?
我目前的方法:
表单页面之间的重定向是不是很糟糕?表格应该POST到下一个表单页面吗?如果是这样,表单验证应该在哪里发生?
<Extension()> _
Public Sub Save(ByVal b As Bitmap, ByVal FileName As String, ByVal Compression As Long, ByVal MimeType As String)
Dim Params As EncoderParameters = New EncoderParameters(2)
Dim CodecInfo As ImageCodecInfo = GetEncoderInfo(MimeType)
Params.Param(0) = New EncoderParameter(Encoder.RenderMethod, EncoderValue.RenderProgressive)
Params.Param(1) = New EncoderParameter(Encoder.Quality, Compression)
b.Save(FileName, CodecInfo, Params)
End Sub
Run Code Online (Sandbox Code Playgroud)
这不起作用.它没有被保存为渐进式.我怎么能这样做,也可以指定nr的通行证.
基本上我正在努力
所有这些都来自一个小书签.这可能吗?我似乎无法为我工作,但这可能是因为我自己的个人失败.
这个问题有很多准重复,我知道:网页模板,如果1行减去页脚是1,则内容占视口的全高,但这不是我想要的; 这是一个热闹的问题:如何创建一个带有页眉,页脚和内容的HTML CSS页面,主要描述我想要的东西,我想,但不幸的是它有点不连贯,并没有真正的答案.我找到了许多帮助做我可能想到的事情,我不想要的事情:
我知道如果我使用"破损"或"边框"框模型,我会得到我想要的东西:
在"破碎"框模型中,给予内容框100%高度的效果很好,因为高度包括顶部和底部填充.这甚至在IE6怪癖模式下运行良好,对于Firefox我刚刚使用了"-moz-box-sizing:border-box;" 让它以同样的方式工作.
但在这里,我们生活在未来,与月亮殖民地和冷冻早餐比萨饼,所以我尽量不回忆太多关于"边境盒"的日子.对于我来说,"获得"这种布局技术最困难的是如何进行滚动内容.我能想到的唯一方法是上面的一个hackish变种:
这种技术在IE6中无法真正起作用; 好吧,事实上它根本不起作用,因为IE6并没有从设置"顶部"和"底部"的含义中获得高度.我可以在IE支持的CSS中使用那些"活跃"的东西,用Javascript有效地计算高度,但我认为这非常恶心.
我在网上经历过很多关于非常相似的布局问题的描述,但是我还没有找到关键的东西是让中间内容框滚动的好方法.我有一种感觉,可能会使用带有上边距和下边距设置的内容框来说明页眉和页脚,但我不知道如何约束它的高度,以便滚动条可以启动正确的点(当实际内容溢出页眉底部和页脚顶部之间的空间时).
想法?链接到模板的宝库?(顺便说一下,马修詹姆斯泰勒的领域似乎已经消失了,给部队带来了很大的干扰.)我几乎没有想法.
更新以下是我想要的示例:http://gutfullofbeer.net/dreamlayout.html
该示例页面应该可以在Firefox和Chrome中运行,我认为Safari,它在IE8中运行一半(只有一半因为我们当然不能指望微软让"-ms-border-box"正常工作).
此外,我正在添加"javascript"标签,以防一些天才可以给我一个不太反感的IE黑客.
另一个更新这里是"妥协"布局,其中中心内容在页眉和页脚的"下方"滚动,滚动条由外部容器提供.它实际上看起来很可爱,取决于你的口味,它在IE6中工作,我想在其他地方(虽然我没有尝试过Opera).当然要忽略颜色; 他们只是作为诊断辅助工具.
我正在建立一个网站,我需要一个用户可以上传大型视频文件的页面,我已经创建了带有流媒体的WCF服务,但我从网页的Button_Click事件中调用了WCF服务.
我已经使用下面提到的文章来创建WCF服务
我已经使用了流,因为它应该是高效的,不应该缓存在服务器的内存中.
现在问题
1)我怀疑整个文件是否上传到Web服务器然后它被转移到WCF服务服务器...如果这是真的那么我没有利用流媒体以及iis和web服务器将关闭很快,如果用户上传大文件或多个用户正在上传文件
2)是否有其他有效的方法与其他技术进行相同的操作
请帮我 ...
编辑:
如果我没有在ASP .Net代码中调用WCF服务方法,那么它也会将字节传输到我用HTTPFox检查过的Web服务器
我已经通过上传控件检查了上面的内容,并在UI上放了一个按钮,其click事件绑定到后面的代码中的一个方法.
所以,我仍然对数据的传输方式感到困惑
注意:如果我在button_click上放置一个调试点并上传10 kb文件,它会在不到1秒的时间内完成.但如果我上传50 MB的文件,那么它需要时间.
我在该button_click事件中放置了调用WCF服务的代码
可能问题是直截了当但我不理解它.
我有以下iPhone代码
for(int x = 0 ; x < [allFriends count] ; x++)
{
Friend *f = [[Friend alloc] init];
f = [allFriends objectAtIndex:x];
if([uid isEqualToString:[f uid]])
{
[f AddAlbum:album];
[allFriends replaceObjectAtIndex:x withObject:f];
}
}
Run Code Online (Sandbox Code Playgroud)
无论我在哪里调用[f release]该应用程序总是崩溃.为什么?(BTW循环运行几千次)
有更有效的方法吗?
我想我提供了足够的代码,如果没有,请告诉我!
谢谢你的帮助!
我尝试在mysql中的几个dbs中运行相同的查询:
def m='xxx'
def dbs = ['DB05DEC05','DB06DEC06','DB07DEC07','DB08DEC08','DB09DEC09','DB10DEC10']
def sql =Sql.newInstance("jdbc:mysql://localhost:3306", "root","", "org.gjt.mm.mysql.Driver")
dbs.each{
db-> sql.eachRow("select * from ${db}.mail where mid=$m", { println "\t$db ${it.mid}"} );
}
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''DBJAN05DEC05'.mail where mid='xxx'
Run Code Online (Sandbox Code Playgroud)
Groovy显然用引号做了一些自定义的东西,并要求你不要在sql中使用引号(注意mid = $ m,如果你使用mid ='$ m'它警告你不要使用引号).问题是,在第一个$我根本不知道需要报价,报价是问题...
在vista上的groovy 1.7.谢谢
编辑:我发现了一个类似的问题,但它没有一个公认的答案...... Groovy GString问题
html ×2
iphone ×2
javascript ×2
rest ×2
.net ×1
animation ×1
arrays ×1
asp.net ×1
bookmarklet ×1
c ×1
calayer ×1
compression ×1
cscope ×1
csrf ×1
css ×1
django ×1
django-forms ×1
file-upload ×1
groovy ×1
image ×1
jpeg ×1
mask ×1
objective-c ×1
pointers ×1
security ×1
sql ×1
wcf ×1
web-services ×1