精华内容
下载资源
问答
  • 这几天公司需要做一个RESTFUL风格的服务接口,之前也没接触过,到网上找了一圈,发现WCF能够支撑,就试着弄了下,本以为半天就能搞定,结果做了两三天,里面的坑确实不少,现在总结一下,避免以后还犯类似错误。...

    这几天公司需要做一个RESTFUL风格的服务接口,之前也没接触过,到网上找了一圈,发现WCF能够支撑,就试着弄了下,本以为半天就能搞定,结果做了两三天,里面的坑确实不少,现在总结一下,避免以后还犯类似错误。

    记录以下几点:

    1、POST以JSON入参注意事项;

    2、设置路由方法;

    3、如何改为https访问;

    4、配置文件;

     

    一、POST以JSON入参注意事项

    先看下入参的Json格式

    {"test_request_body": {"description": "This is a request body message."}}

    数据分两层,外层是【test_request_body】,里层是【description】,那么对应的接口接收时,也应该将对象分为两层:

    public class Test1
    {
        [JsonProperty("test_request_body")]
        public TestModel test_request_body = new TestModel();
    }
    
    
    [DataContract]
    public class TestModel
    {
        [DataMember]
        public string description = string.Empty;
    }

    【TestModel】为里层信息,上面记得要加上“DataContract”,属性要加上“DataMember”,外层【Test1】里直接定义一个【TestModel】属性即可,这里要注意的是实例化对象的名称【test_request_body】,这个名必须和Json里的名称一致,否则接口无法解析Json数据,这个坑坑了我好久

    下面是接口定义:

    [OperationContract]
    [WebInvoke(Method = "POST", 
               ResponseFormat = WebMessageFormat.Json, 
               RequestFormat = WebMessageFormat.Json, 
               BodyStyle = WebMessageBodyStyle.Bare, 
               UriTemplate = "test_connection")]
    string test_connection(Test1 test);

     

    二、定义路由方法

    添加全局类,然后在【Application_Start】方法中,添加下面信息:

    System.Web.Routing.RouteTable.Routes.Add(new System.ServiceModel.Activation.ServiceRoute("onmc/v1/Test", new System.ServiceModel.Activation.WebServiceHostFactory(), typeof(Test)));

    这样访问路径就会变成:http://localhost:12847/onmc/v1/Test/test_connection,符合RESTFUL风格

     

    三、修改为https访问

    第一步,需要生成证书,具体方式可按以下操作:

    https://www.cnblogs.com/tangdacheng/p/4697175.html

    第二步,导出证书,在浏览器上点击网址https左侧的小锁头,就能导出,主要在客户端请求时要使用

    第三步,在IIS上配置https访问,记得先把第一步生成的证书导入到IIS所在服务中,否则配置时下拉看不到证书

    第四步,设置Web.Config

    如果要使用https访问,必须加上【secrity】节点,上面的配置里,【PatientService】和【LogService】使用了https访问方式

    以上几步做完即可使用https访问

     

    四、整体配置文件如下:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    
      <appSettings>
        <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
        <add key="MysqlConnString" value="server=127.0.0.1;database=ois_data;uid=root;port=3306;pwd=aaabbbccc;Charset=utf8;"/>
        <add key="LogFilePath" value="F://DeviceLog//"/>
      </appSettings>
      <system.web>
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5"/>
      </system.web>
      
      <system.serviceModel>
        <bindings>
          <webHttpBinding>
            <!--文件上传大小设置-->
            <binding name="myBindingTest">
            </binding>
            <binding name="myBindingPub">
            </binding>
            <binding name="myBinding" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" transferMode="Streamed" >
              <readerQuotas maxDepth="64" maxArrayLength="2147483647" maxStringContentLength="2147483647"/>
              <!--https设置-->
              <security mode="Transport">
                <transport clientCredentialType="None"></transport>
              </security>
            </binding>
          </webHttpBinding>
        </bindings>
    
        <!--定义服务-->
        <services>
          <service behaviorConfiguration="serviceBehavior" name="OisTransServer.PatientService">
            <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="myBinding" contract="OisTransServer.IPatientService" />
          </service>
          <service behaviorConfiguration="serviceBehavior" name="OisTransServer.LogService">
            <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="myBinding" contract="OisTransServer.ILogService" />
          </service>
          <service behaviorConfiguration="serviceBehavior" name="OisTransServer.PublicService">
            <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="myBindingPub" contract="OisTransServer.IPublicService" />
          </service>
          <service behaviorConfiguration="serviceBehavior" name="OisTransServer.Test">
            <endpoint address="" behaviorConfiguration="web" binding="webHttpBinding" bindingConfiguration="myBindingTest" contract="OisTransServer.ITest" />
          </service>
        </services>
        
        <behaviors>
          <endpointBehaviors>
            <behavior name="web">
              <webHttp />
            </behavior>
          </endpointBehaviors>
          <serviceBehaviors>
            <behavior name="serviceBehavior">
              <serviceMetadata httpGetEnabled="false" httpsGetEnabled="true" />
              <serviceDebug includeExceptionDetailInFaults="false" />
            </behavior>
          </serviceBehaviors>
        </behaviors>
        
        <protocolMapping>
            <add binding="basicHttpsBinding" scheme="https" />
        </protocolMapping>    
        <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
      </system.serviceModel>
      
      <system.webServer>
        <modules runAllManagedModulesForAllRequests="true"/>
        <!--
            若要在调试过程中浏览 Web 应用程序根目录,请将下面的值设置为 True。
            在部署之前将该值设置为 False 可避免泄露 Web 应用程序文件夹信息。
          -->
        <directoryBrowse enabled="true"/>
      </system.webServer>
    
      <system.diagnostics>
        <sources>
          <source name="System.ServiceModel" switchValue="Warning" propagateActivity="true">
            <listeners>
              <add name="xml" />
            </listeners>
          </source>
        </sources>
        <sharedListeners>
          <add name="xml" type="System.Diagnostics.XmlWriterTraceListener" initializeData="d:\wcf.svclog" />
        </sharedListeners>
      </system.diagnostics>
    </configuration>
    

    有以下两点需要说明:

    1、所有的接口都需要在【services】中定义,【endpoint】可以空着不写;

    2、【webHttpBinding】中,【myBinding】设置了Post数据大小,对应的是【PatientService】和【LogService】,这两个接口主要用于大量数据及文件传输;

     

    最后,再说下实现方法中,常用到的功能

    1、获取请求头信息

    //用于获取请求头信息
    IncomingWebRequestContext request = WebOperationContext.Current.IncomingRequest;
    WebHeaderCollection headers = request.Headers;
    
    str_transKey = headers["ACCESS_TOKEN"].ToString();

    2、获取请求端信息

    //用于获取访问端信息
    OperationContext context = OperationContext.Current;
    MessageProperties properties = context.IncomingMessageProperties;
    RemoteEndpointMessageProperty endpoint = properties[RemoteEndpointMessageProperty.Name] as RemoteEndpointMessageProperty;
    
    string str_reqAddress = endpoint.Address; //请求IP地址
    string str_reqPort = endpoint.Port; //请求端口

    3、设置httpStatus编码

    //用于设置httpStatus
    WebOperationContext woc = WebOperationContext.Current;
    woc.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.OK;
    
    //设置为400错误
    woc.OutgoingResponse.StatusCode = System.Net.HttpStatusCode.BadRequest;
    

    4、返回标准的Json(不带【\"】转义符的)

    //将对象result2转为Json字符串
    string str_json = JsonConvert.SerializeObject(result2);
    
    //设置返回Boday
    HttpContext.Current.Response.ContentType = "application/json; charset=utf-8";
    HttpContext.Current.Response.Write(str_json);

     

    展开全文
  • C++/C编写接口时需要注意

    千次阅读 2011-10-18 10:30:18
    2.首先了解使用你的库的人的编程习惯,如果他喜欢用char*而不是string,那么你需要根据他们的习惯来编写接口,这样比较容易使他们接收,当然首要遵守你们公司的规定; 3.如果你的库提供了创建对象或对象指针的方法...

    如果需要编写库提供给别人使用,需要注意下面的问题:

    1.如果是大型项目,需要使用命名空间来确保你的库中的函数名不会和别人的函数名冲突;

    2.首先了解使用你的库的人的编程习惯,如果他喜欢用char*而不是string,那么你需要根据他们的习惯来编写接口,这样比较容易使他们接收,当然首要遵守你们公司的规定;

    3.如果你的库提供了创建对象或对象指针的方法,那么你同样需要提供删除对象或对象指针的方法,原则上在那里创建,就在那里删除;

    4.如果接口中有传入整数参数,可以改成枚举类型,这样可以提供编译时的类型检查;

    5.还需要跟团队协商,你写的模块在遇到错误时,是否能抛出一个致命的错误,导致整个程序终止,如果不行,那你需要注意不能抛出这样的错误,只能以温和的方式返回。

    6.如果程序中需要新增一个接口,一定要问为什么需要增加?是否可以使用以前的接口?如果是同类型的问题,可以借用以前的接口,通过字符串解释,或是结构体实现;

    7.在接口的参数类型选择中,如果不是必须用一个类的类型,那么最好不要使用类作为参数类型,这可能带来莫名其妙的问题;

    8.尽可能让接口可编程,而不是表达语义,每个接口都由一个可编程部分和一个语义部分组成。可编程部分有接口中的数据类型与其他属性构成,编译器能强制地要求他们(在编译时检查错误)。而语义则由本接口将被怎样使用的假定组成,语义接口应通过注释说明,但尽可能不让接口依赖这些说明。一个接口中任何无法通过编译器强制实施的部分,就可能被误用。

    9.接口中提供成对 的服务。


    未完待续。。。。


    展开全文
  • 一、编写接口方法首先我们要了解的就是java接口当中常量的修饰关键字,以及函数的修饰关键字是什么。1、接口当中,常量的修饰关键字可以分成三种,分别是(1)public、(2)static、(3)final(常量);2、接口当中,函数的...

    相信很多java新手都有这样的疑问,java的接口是怎样写的呢?有哪些东西是需要注意的?下面就让我们一起详细的来了解一下这方面的内容吧!

    一、编写接口方法

    首先我们要了解的就是java接口当中常量的修饰关键字,以及函数的修饰关键字是什么。

    1、接口当中,常量的修饰关键字可以分成三种,分别是(1)public、(2)static、(3)final(常量);

    2、接口当中,函数的修饰关键字可以分成两种,分别是(1)public、(2)abstract;

    注意了,假如你没有写全的话,那么系统在进行编译的时候,是会自动帮你加上的。

    除此之外,还要明白,接口当中的所有成员都是public,这个是我们一定要清楚的。

    除了这个之外,还要知道,接口当中所有的方法,都是抽象方法。

    下面是一些主要要注意的地方,大家可以详细的来了解一下。

    1、注意,接口是不能够创建对象,因为有抽象方法

    2、子类假如只实现部分接口的抽象方法,那么,子类是抽象类,依旧是不能够创建对象

    3、子类只有在将接口当中的抽象方法全部都实现,那么才能够说创建对象

    在这里需要注意:实现接口的方法,一定要是public修饰的,这样的主要原因就是因为,抽象类当中的成员(常量以及方法)都是public修饰的

    注意:一个类只可以继承一个父类,能够实现多个接口

    实现接口和继承类的选用方法:

    继承表示,子类是父类的一部分,举一个最通俗易懂的例子,人和学生的关系

    实现接口表示,接口是类的一部分功能的实现,举一个最通俗易懂的例子,人和开车的关系,接口通常的来说都是实现类的扩展功能

    下面我们可以来看看下面的java实例(代码实例):

    代码//定义student接口

    interface student

    {

    public static final String COUNTRY = "China";

    public abstract void study();

    public abstract void work();

    }

    //实现接口部分抽象方法的类,为抽象类

    abstract class goodStudent implements student

    {

    public void study()

    {

    System.out.println("实现接口的抽象了");

    }

    }

    //将接口中的所有方法都实现了,可以创建对象

    class badStudent implements student

    {

    public void study()

    {

    System.out.println("努力学习");

    }

    public void work()

    {

    System.out.println("努力工作");

    }

    }

    public class test

    {

    public static void main(String[] args)

    {

    badStudent bs = new badStudent();

    bs.study();

    bs.work();

    }

    }

    最终的运行结果:努力学习,努力工作。

    延伸阅读:

    1、接口是什么?

    接口具体有两种

    (1)硬件类接口,指的就是同一个计算机不同功能层之间的通信规那么就被叫做接口

    (2)软件类接口,指的是对协定进行定义的引用类型,其他类型实现接口,以保证它们支持某些操作。

    接口指定一定是要由类提供的成员或者是实现它的其他接口,和类比较相似,接口可以包含方法、属性、索引器和事件作为成员。

    以上就是对于java接口编写的简单介绍,你都了解了吧,更多java入门知识,请继续来奇Q工具网的java入门栏目了解吧。

    推荐阅读:

    展开全文
  • 一个项目 接口编写需要注意的地方

    千次阅读 2016-05-27 12:33:12
    1.项目接口编写注意项:  1.1 接口方面的函数要保证一个处理数据的函数是拆分到最小程度的函数,不要参杂其他的数据处理;  1.2 在处理数据前要先处理从客户端传回的数据是否正确以及是否有问题,无论客户端是否...

    1.项目接口编写注意项:

            1.1 接口方面的函数要保证一个处理数据的函数是拆分到最小程度的函数,不要参杂其他的数据处理;

            1.2  在处理数据前要先处理从客户端传回的数据是否正确以及是否有问题,无论客户端是否做了判断都要确保在接口方面一定要返回正确的错误信息;

            1.3 加强mvc 模式  处理数据dao层不要参杂 业务处理。只管确保当前的数据对数据库的操作是否正确。

            1.4 项目在完成70%以后,在测试阶段。要从项目的整体角度来测试不要从程序猿的角度来看,项目每个阶段测试结果都要已文档的方式给技术人员发放,并且每天都要进行 回馈审核;

    展开全文
  • 编写REST风格接口注意

    千次阅读 2019-03-15 23:09:25
    https://blog.csdn.net/houjixin/article/details/54315835 就看这篇文章等待过两天总结。写了大概半年的restful接口,但是没有注意其中的注意点。多注意这些细节,你才能进步。 ...
  • 1.在多线程程序中,最好使用ads的多线程编程接口(见TcAdsAPI.h文件中147行之后的那些函数)。使用一般的接口可能会出现无法读写的问题。 ///////////////////////////////////////////////////////////////////////...
  • 如何编写接口文档

    千次阅读 2017-11-06 18:53:38
    一个简单的接口文档,写完给组长看后,发现漏洞百出。下面总结一下写文档需要注意事项:  封皮  封面最好是本公司规定的封面,有logo,内容标题,版本号,公司名称,文档产生日期。(错误地方在于,文档的标题要...
  • react,vue编写接口文档

    2020-11-18 19:58:20
    1. 安装模块 npm i apidoc --global ...3.编写接口文档 在路由的配置前添加如下代码(星号注释起来的部分) 注意一定要写在路由的前面,不然不起作用 var router = require('express').Router() var sql = re
  • 编写一份基本的接口文档要注意以下几点: 1.一定要有版本号,因为基本上对应的接口都是刚开发或者待开发的(已经正常使用的接口也不需要你来写文档)不可能一次提供最终版,方便后续更改,同时避免因为修改多次导致...
  • c++ 如何编写接口类(interface)

    万次阅读 2018-08-15 23:46:08
    用c++实现接口类时需要注意一下几点: 1、接口类中不应该声明成员变量,静态变量。 2、可以声明静态常量作为接口的返回值状态,需要在对应的cpp中定义并初始化,访问时需要使用"接口类型::静态常量名".....
  • 用c++实现接口类时需要注意一下几点: 1、接口类中不应该声明成员变量,静态变量。 2、可以声明静态常量作为接口的返回值状态,这些静态变量需要初始化,访问时需要使用"接口类型::静态常量名"访问 2、定义的接口...
  • Flask 编写Restful 接口

    2020-09-06 20:26:19
    # 要注意几个点 请求方式 , 序列化方式, 入参的处理 # 下面设置路由和参数 from flask_restful import Api api = Api() # 初始化api对象 def init_api(app): api.init_app(app) # 在项目初始化的地方...
  • 如何编写一份接口文档

    万次阅读 2017-03-31 11:29:45
    编写一份基本的接口文件要注意以下几点: 1.一定要有版本号,因为基本上对应的接口都是刚开发或者待开发的(已经正常使用的接口也不需要你来写文档)不可能一次提供最终版,方便后续更改,同时避免因为修改多次导致...
  • 蓝图接口程序编写

    2020-07-10 09:32:03
    bug AttributeError: 'function' object has no attribute 'name'的几个注意事项 1、蓝图注册这段代码中,import应该import emp_bp def register_blueprints(app): from api.emp import emp app.register_...
  • 用PHP编写简单的api(数据接口

    万次阅读 多人点赞 2018-07-29 21:37:26
    一、编写接口所需几样工具或软件(均是win7+64位): 1.phpStudy、SQLyog和编码工具(sublime text/webStorm/vs code均可,按自己习惯来); 2.安装好phpStudy之后,打开软件,点击启动;如果Apache和MySQL右边的...
  • 2002/09/29 written by Wooce:  比如缓冲区大小是8个字节, OCIStmtFetch2()函数如果这一次取得的记录实际长度是5个字节, 那么OCIStmtFetch2()函数只会把缓冲区的前5个字节填入这次取得的记录的结果, 而后3个...
  • 编写脚本注意事项

    2011-10-20 23:30:46
    脚本每天都会被调度程序调度,因此体会到定义接口的重要性,同时日志的重要性也毋庸置疑了。下面是对这一段时间写shell/bat/vbs脚本的编写总结: (1)脚本要能够完成相应任务 (2)异常处理机制 (3)是否提供重做...
  • QT编写通用接口提示无法解析的外部符号 需注意一下几点: 1.构造函数一定要有函数实现; CDataGenerater() { } 2.需析构和纯虚析构一定要有函数实现; //virtual ~CDataGenerater() = 0; //virtual ~...
  • PHP环境搭建和编写API接口

    千次阅读 2017-08-10 17:27:41
    PHP 环境搭建  PHP环境搭建是一个比较简单的事情,但是如果你不注意某些规则,会有各种各样的麻烦。 工具列表 apache http server 服务器 ...下载地址 ...注意事项   当我拿到这几个地址时有些兴奋,官方
  • 编写程序注意事项

    2008-11-10 10:03:27
    [list] [*]是否符合代码格式化标准 [*]是否有多余的import项 [*]是否定义了多余的field [*]是否定义了多余的本地变量 [*]是否定义了多余的...[*]调用静态常量是否使用类/接口名 [*]是否所有实现了java...
  • 我没学习过axis系列,一开始学的就是xfire,myeclipse5.1支持xfire支持的...点击finish之后,myeclipse自动帮你生成services.xml以及web应用目录结构,其中的services.xml是你导出服务的配置文件,注意在WEB-INF/web.x
  • VS写接口应用

    千次阅读 2018-08-27 16:11:35
    使用vs编写接口应用,从创建项目到测试 新建项目 选择新建项目,找到ASP.NET Web应用程序 等待项目自动创建完成 在新建好的项目上右键 选择“添加“,”新建项“,选择”WCF服务“。 这样就有了一个...
  • 通过编写接口来访问带这类命名结构的表会出问题。如前所述,SQL Server的灵活性不应用作编写错误代码或创建问题对象的借口。 注意在使用Management Studio的脚本工具时,SQL Server会界定所有的对象。这不是因为...
  • 为了让更多的人少走弯路,特将编写方法和注意事项记录下来,希望能够对大家有帮助; 短信网关的申请流程(此部分工作我们有专门的同事去搞定,我仅略知一二,仅供参考); 向宽带公司(我们用的是联通在信平台)...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,669
精华内容 667
关键字:

编写接口注意