另外现在语言和平台之间的互操作协议,json 相比 SOAP 早就一统江湖啦,唯一的争议是到底 json 格式语义如何定义,GraphQL/jsonapi,其实就是选 react 还是 ember.js,但无论如何前后端分离肯定是趋势,如果喜欢 Rails 的话 Rails 5 API 里面推荐的官方 gem 是AWS,其实换句话说,Rails 官方也给你选了,就是 jsonapi+ember.js 的方案。
所以我现在 focus 这两个技术,一个就是 ember.js,另外就是 rails 5。其他 wdsl, Thrift, Protobuf 特定场合特定技术吧,未来 Rails 主流应该还是 jsonapi。
#9 楼 @jimrokliu 同意,如果是 rails 的话,应该提供 json 格式的 restful 风格的 API 给其他平台调用,提供 web service 简直是扬短避长,.NET 这边调用 json 的话,虽然麻烦点,但也能接受,比如这样:
using (WebClient client = new WebClient())
{
string url = string.Format("http://10.71.5.88/forms/real_time_broadcasts/{0}/confirm_speaked.json", say.confirm_speaked_id);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
request.Method = "POST";
request.Timeout = 5000;
request.ReadWriteTimeout = 10000;
request.Accept = "application/json";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
StreamReader reader = new StreamReader(response.GetResponseStream());
string htmldoc = reader.ReadToEnd();
response.Close();
}
#6 楼 @mumu 最官方的是用 jbuilder,返回 json 对象给.NET/Java 使用。
using Newtonsoft.Json;
string strlot = jsonLotInfo("M1516M8177");
var lot = JsonConvert.DeserializeObject<dynamic>(strlot);
Console.WriteLine(string.Format("Product: {0}", lot.product.product_name));
Console.WriteLine(string.Format("POD: {0}", lot.product.package_of_drawing.name));
foreach (var wfs in lot.workflow.workflowsteps)
{
Console.WriteLine(string.Format(" Step: {0}", wfs.workflowstepname));
}
private static string jsonLotInfo(string lot_no)
{
String ret = String.Empty;
HttpWebRequest webReq = (HttpWebRequest)WebRequest.Create(new Uri(string.Format("http://mesview.sandisk.com/lots/{0}.json", lot_no)));
webReq.ContentType = "application/json; charset=UTF-8";
webReq.Accept = "application/json";
webReq.Timeout = 30000;
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse();
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.Default);
ret = sr.ReadToEnd();
sr.Close();
response.Close();
return ret;
}
用 savon,别用内置的 soap/wsdlDriver,这个在 Ruby 新版本已经去除了
现在一般都用 mysql2 了。
virtual_path 概念能具体说一下么,这个和i18n里面的有关联么?
可以参考这个帖
varchar255 性能和 varchar10 性能几乎是一样的,和线上系统因为用户名字大于预期,造成错误和商业损失相比,简直不值一提。
注意过多细节会导致重要事项的注意力缺失,这正是诸如 Rails 这样的框架的核心价值所在。
React-native 写错了
用net-ping,还需要装一下win32-security
测试可用。
c:\git>irb
irb(main):001:0> require 'net/ping'
=> true
irb(main):002:0> pt = Net::Ping::TCP.new('cvpmesip01')
=> #<Net::Ping::TCP:0x193eee8 @host="cvpmesip01", @port=7, @timeout=5, @exception=nil, @warning=nil, @duration=nil>
irb(main):003:0> pt.ping
=> false
irb(main):004:0> pt = Net::Ping::TCP.new('cvpmesip01',2881)
=> #<Net::Ping::TCP:0x2a798f0 @host="cvpmesip01", @port=2881, @timeout=5, @exception=nil, @warning=nil, @duration=nil>
irb(main):005:0> pt.ping
=> true
irb(main):006:0> pt = Net::Ping::TCP.new('cvpmesip01',80)
=> #<Net::Ping::TCP:0x2b18b90 @host="cvpmesip01", @port=80, @timeout=5, @exception=nil, @warning=nil, @duration=nil>
irb(main):007:0> pt.ping
=> true
其实正确的姿势是用wechat gem,还有官方调试工具。。。
棒!
其实guides.rubyonrails.org,官方 guide 真的值得细读,更何况还是免费的。
可惜 present?是 activesupport 的写法,如果不想用这个 gems,有没有其他更好的写法?
如果用的是 Rails 4.2.3+,可以考虑用这个where-or
gem,就是Rails 5 的 where.or
Ruby 2.2 开始有了birthtime,就是你要的。
可以参考这个帖子
等下一代吧,应该很快出了,Skylake
有个 on_falure 可以看一下。
http://net-ssh.github.io/ssh/v1/chapter-5.html
channel.on_failure do
puts "shell could not be started!"
end
channel.on_data do |ch,data|
puts "recieved #{data} from shell"
end
channel.on_close do
puts "shell terminated"
end