jsonrpcjava以太坊
① WEB開發中,使用JSON-RPC好,還是RESTful API好
安全是恆久的話題,對於基於WSDL和SOAP的Web Service,我們有WS-Security這樣的安全規范來指導實現認證、授權、身份管理等安全需求。那麼,RESTful API有無成熟可用規范或實現框架呢?如何保證RESTful API的安全性呢?
如何對RESTful API進行版本控制,請分享您認為實用的做法?
HTTP1.1規范中給出的動詞對於設計RESTful API夠用嗎?您在實際項目中會擴展自己的動詞嗎?在什麼情況下需要擴展?
今年5月份發布的JAX-RS 2.0規范對於RSTfulAPI的設計最有價值的特性是哪個(些)? 它(們)用於解決什麼問題?
能否為InfoQ的讀者們推薦一款實用的RESTful API開發框架,並說明您的推介理由。
HTTP2.0規范正在制定當中,您對它的期待是什麼?
InfoQ:什麼是好的RESTful API?相信每個人都有自己的評判標准。那麼,您認為一個好的RESTful API應該具有哪些特徵呢?
② thinkphp jsonrpc java怎麼調用
服務端示例:
<?php
namespace Rpc\Controller;
use Think\Controller\JsonRpcController;
class JsonApiController extends JsonRpcController
{
public function index(){
return 'Hello, JsonRPC!';
}
// 支持參數傳入
public function test($name=''){
return "Hello, {$name}!";
}
}
客戶端示例:
vendor('jsonRPC.jsonRPCClient');
$client = new \jsonRPCClient('http://www.tp.cn/index.php/Rpc/JsonApi');
$result = $client->index();
var_mp($result); // 結果:Hello, JsonRPC!
$result = $client->test('deeka');
var_mp($result); // 結果:Hello, deeka!
③ 使用json-rpc規范交換數據,server用jsonRPCServer.php寫的,在client用java做,怎麼獲取json數據
/**
* Copyright (c) linkwise 2007-2009 corporation.
* All rights reserved
*/
package com.linghui.common.util;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;
import com.linghui.common.util.DateUtil;
import com.linghui.common.util.jsonutil.DateJsonValueProcessor;
/**
*
*/
public class JsonUtil {
/**
* 從一個JSON 對象字元格式中得到一個java對象
* @param jsonString
* @param pojoCalss
* @return
*/
public static Object getObject4JsonString(String jsonString,Class pojoCalss){
Object pojo;
JSONObject jsonObject = JSONObject.fromObject( jsonString );
pojo = JSONObject.toBean(jsonObject,pojoCalss);
return pojo;
}
/**
* 從json HASH表達式中獲取一個map,改map支持嵌套功能
* @param jsonString
* @return
*/
public static Map getMap4Json(String jsonString){
JSONObject jsonObject = JSONObject.fromObject( jsonString );
Iterator keyIter = jsonObject.keys();
String key;
Object value;
Map valueMap = new HashMap();
while( keyIter.hasNext())
{
key = (String)keyIter.next();
value = jsonObject.get(key);
valueMap.put(key, value);
}
return valueMap;
}
/**
* 從json數組中得到相應java數組
* @param jsonString
* @return
*/
public static Object getObjectArray4Json(String jsonString){
JSONArray jsonArray = JSONArray.fromObject(jsonString);
return jsonArray.toArray();
}
/**
* 從json對象集合表達式中得到一個java對象列表
* @param jsonString
* @param pojoClass
* @return
*/
public static List getList4Json(String jsonString, Class pojoClass){
JSONArray jsonArray = JSONArray.fromObject(jsonString);
JSONObject jsonObject;
Object pojoValue;
List list = new ArrayList();
for ( int i = 0 ; ijsonArray.size(); i++){
jsonObject = jsonArray.getJSONObject(i);
pojoValue = JSONObject.toBean(jsonObject,pojoClass);
list.add(pojoValue);
}
return list;
}
/**
* 從json數組中解析出java字元串數組
* @param jsonString
* @return
*/
public static String getStringArray4Json(String jsonString){
JSONArray jsonArray = JSONArray.fromObject(jsonString);
String stringArray = new String[jsonArray.size()];
for( int i = 0 ; ijsonArray.size() ; i++ ){
stringArray[i] = jsonArray.getString(i);
}
return stringArray;
}
/**
* 從json數組中解析出javaLong型對象數組
* @param jsonString
* @return
*/
public static Long getLongArray4Json(String jsonString){
JSONArray jsonArray = JSONArray.fromObject(jsonString);
Long longArray = new Long[jsonArray.size()];
for( int i = 0 ; ijsonArray.size() ; i++ ){
longArray[i] = jsonArray.getLong(i);
}
return longArray;
}
/**
* 從json數組中解析出java Integer型對象數組
* @param jsonString
* @return
*/
public static Integer getIntegerArray4Json(String jsonString){
JSONArray jsonArray = JSONArray.fromObject(jsonString);
Integer integerArray = new Integer[jsonArray.size()];
for( int i = 0 ; ijsonArray.size() ; i++ ){
integerArray[i] = jsonArray.getInt(i);
}
return integerArray;
}
/**
* 從json數組中解析出java Date 型對象數組,使用本方法必須保證
* @param jsonString
* @return
*/
public static Date getDateArray4Json(String jsonString,String DataFormat){
JSONArray jsonArray = JSONArray.fromObject(jsonString);
Date dateArray = new Date[jsonArray.size()];
String dateString;
Date date;
for( int i = 0 ; ijsonArray.size() ; i++ ){
dateString = jsonArray.getString(i);
date = DateUtil.stringToDate(dateString, DataFormat);
dateArray[i] = date;
}
return dateArray;
}
/**
* 從json數組中解析出java Integer型對象數組
* @param jsonString
* @return
*/
public static Double getDoubleArray4Json(String jsonString){
JSONArray jsonArray = JSONArray.fromObject(jsonString);
Double doubleArray = new Double[jsonArray.size()];
for( int i = 0 ; ijsonArray.size() ; i++ ){
doubleArray[i] = jsonArray.getDouble(i);
}
return doubleArray;
}
/**
* 將java對象轉換成json字元串
* @param javaObj
* @return
*/
public static String getJsonString4JavaPOJO(Object javaObj){
JSONObject json;
json = JSONObject.fromObject(javaObj);
return json.toString();
}
/**
* 將java對象轉換成json字元串,並設定日期格式
* @param javaObj
* @param dataFormat
* @return
*/
public static String getJsonString4JavaPOJO(Object javaObj , String dataFormat){
JSONObject json;
JsonConfig jsonConfig = configJson(dataFormat);
json = JSONObject.fromObject(javaObj,jsonConfig);
return json.toString();
}
/**
* @param args
*/
public static void main(String args) {
// TODO 自動生成方法存根
}
/**
* JSON 時間解析器具
* @param datePattern
* @return
*/
public static JsonConfig configJson(String datePattern) {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String{""});
jsonConfig.setIgnoreDefaultExcludes(false);
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
jsonConfig.registerJsonValueProcessor(Date.class,
new DateJsonValueProcessor(datePattern));
return jsonConfig;
}
/**
*
* @param excludes
* @param datePattern
* @return
*/
public static JsonConfig configJson(String excludes,
String datePattern) {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(excludes);
jsonConfig.setIgnoreDefaultExcludes(false);
jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
jsonConfig.registerJsonValueProcessor(Date.class,
new DateJsonValueProcessor(datePattern));
return jsonConfig;
}
}
/**
* linkwise
*/
package com.linghui.common.util.jsonutil;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import net.sf.json.JsonConfig;
import net.sf.json.processors.JsonValueProcessor;
/**
* @author robert.feng
*
*/
public class DateJsonValueProcessor implements JsonValueProcessor {
public static final String DEFAULT_DATE_PATTERN = "yyyy-MM-dd";
private DateFormat dateFormat;
/**
* 構造方法.
*
* @param datePattern 日期格式
*/
public DateJsonValueProcessor(String datePattern) {
if( null datePattern )
dateFormat = new SimpleDateFormat(DEFAULT_DATE_PATTERN);
else
dateFormat = new SimpleDateFormat(datePattern);
}
/* (非 Javadoc)
* @see net.sf.json.processors.JsonValueProcessor#processArrayValue(java.lang.Object, net.sf.json.JsonConfig)
*/
public Object processArrayValue(Object arg0, JsonConfig arg1) {
// TODO 自動生成方法存根
return process(arg0);
}
/* (非 Javadoc)
* @see net.sf.json.processors.JsonValueProcessor#processObjectValue(java.lang.String, java.lang.Object, net.sf.json.JsonConfig)
*/
public Object processObjectValue(String arg0, Object arg1, JsonConfig arg2) {
// TODO 自動生成方法存根
return process(arg1);
}
private Object process(Object value) {
return dateFormat.format((Date) value);
}
}
④ ETH以太坊Ethereum如何使用RPC調用實現web端充值提現
以太坊源碼go-ethereum怎麼運行
安裝基於MIPS的linux頭文件
$ cd $PRJROOT/kernel
$ tar -xjvf linux-2.6.38.tar.bz2
$ cd linux-2.6.38
在指定路徑下創建include文件夾,用來存放相關頭文件。
$ mkdir -p $TARGET_PREFIX/include
保證linux源碼是干凈的。
$ make mrproper
生成需要的頭文件。
$ make ARCH=mips headers_check
$ make ARCH=mips INSTALL_HDR_PATH=dest headers_install
將dest文件夾下的所有文件復制到指定的include文件夾內。
$ cp -rv dest/include/* $TARGET_PREFIX/include
最後刪除dest文件夾
$ rm -rf dest
$ ls -l $TARGET_PREFIX/include
⑤ jsonrpc怎麼用
按照標準的JSON字元串格式發送不就行了
json-rpc是一套標准
wiki.geekdream.com/Specification/json-rpc_2.0.html
這里是2.0的官方文檔,你看下,另外解析用的包也需要引入
⑥ json rpc 介面 java可以調用嗎
JSONObject jsonObject = new JSONObject();
Map map = request.getParameterMap();
Iterator<?> it = map.keySet().iterator();
while(it.hasNext()){
String key = (String)it.next();
String[] values = (String[])map.get(key);
jsonObject.accumulate(key, values[0]);
}
String name = jsonObject.getString("userName"); //返回從前台接受的用戶名
System.out.println(name); //輸出用戶名
jsonObject.clear(); // 清空jsonObjec中的數據
jsonObject.put("love" , "足球"); //將足球賦給love這個變數名
out.print(jsonObject); //返回json格式的數據
⑦ jsonrpc java怎麼運行
JSON-RPC-Java 由兩個對用戶可視化的組件構成,它們是JSONRPCBridge和JSONRPCServlet,二者的協調實現了JSON伺服器端對請求對象的處理,並響應給用戶。
JSONRPCBridge是一個擁有伺服器端導出給特定客戶端的對象的引用的session對象,它接收伺服器(也就是JSONRPCServlet)傳來的JSON-RPC請求,然後其把JSON對象解碼(unmarshalling)為Java對象,再扮演方法調用的角色,還要把方法調用返回的Java對象結果組碼(marshall)為JSON對象傳給客戶端處理。而具體的從Java對象到Javascript對象的類型轉換由負責串列化的串列化類Serializer處理。
JSONRPCBridge必須放置在HttpSession對象中,並且注冊屬性名為「JSONRPCBridge」,以使JSONRPCServlet能夠定位負責調用導出到客戶端的Java對象的橋。為此,為了導出一個對象的所有實例和靜態方法到客戶端,應該有如下的代碼: JSONRPCBridge.registerObject("myObject", myObject);
為了導出一個類的所有的靜態方法,應該:JSONRPCBridge.registerClass(("myObject", myObject);
如果registerObject和registerClass被多次調用為有相同鍵值的對象使用,那麼其將被最新賦值的對象所更新。
在JSON中,還可以使用單例模式的globalBridge來為所有的HTTP客戶端導出所有的實例方法。其可以用來注冊工廠類,但使用時要注意認證與安全問題。使用時如下標識:JSONRPCBridge.getGlobalBridge().registerObject("myObject",myObject); 同上其還可以導出所有的靜態方法。
該協議中最重要的一部分還有就是Servlet了,現在就來簡單的介紹一下:
在該協議中,JSONRPCServlet充當傳送器,處理通過HTTP傳輸過來的JSON