简单易用的Rest

简介:

今天碰巧,用到了淘宝的在线IP地址查询的Rest API,它提供接口给用户查询IP地址的归宿地。数据库比较庞大,准确性也比较高。地址为:http://ip.taobao.com/instructions.php

Center

这是一个GET请求的接口,使用方式很简单,只要将这个URL复制到浏览器的地址栏就可以了。

Center

可以看到接口返回的是一串JSON格式的字符串。关于如何解析JSON,参考我的这篇博文:http://blog.csdn.net/chinacsharper/article/details/9246627

那么如何在程序中实现呢?我们新建一个控制台应用程序,并键入如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace  RestServiceApp
{
     class  Program
     {
         static  void  Main( string [] args)
         {
             string  url =  "http://ip.taobao.com/service/getIpInfo.php?ip=210.75.225.254" ;
             HttpWebRequest request = (HttpWebRequest)WebRequest.CreateDefault( new  Uri(url));
             WebResponse response = request.GetResponse();
             StreamReader reader =  new  StreamReader(response.GetResponseStream());
             Console.WriteLine(reader.ReadToEnd());
         }
     }
}

运行它可以看到:


Center

关于如何解码\u4e2d\u56fd这样的字符串,可以参考我的这篇博文:http://blog.csdn.net/chinacsharper/article/details/9885165

好了,如何调用这个淘宝IP地址的接口就到这,不过我由此想到了两个东西,一个是WCF Rest,一个是ASP.NET MVC中的Rest Api,这里先介绍一下WCF Rest。

我们在前文也简单的讲解过如何使用WCF,WCF最关键的要素就是A(Address地址)、B(Binding绑定)、C(Contract契约)。为了便于演示,我们直接用控制台应用程序作为WCF Rest的宿主程序,先建立一个类库项目,里面的代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
namespace  Service.Interface
{
     [ServiceContract]
     public  interface  IAddress
     {
         [WebGet(UriTemplate =  "ip={ip}" )]
         Address Get( string  ip);
     }
     [DataContract]
     public  class  Address
     {
         [DataMember]
         public  string  IPAddress {  get set ; }
         [DataMember]
         public  string  Province {  get set ; }
         [DataMember]
         public  string  City {  get set ; }
     }
}

很简单,就是定义了一个契约,用于获取IP地址信息。需要说明一下,这个项目需要引用System.ServiceModel和System.Runtime.Serialization这两个dll。

接下来就是要创建一个WCF Rest服务端程序,用以提供服务。

先定义一个类AddressService,并实现我们刚刚定义的IAddress接口。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
namespace  Service
{
     public  class  AddressService : IAddress
     {
         private  static  IList<Address> addresses =  new  List<Address>();
                                                      
         static  AddressService()
         {
             //这里可以准备一个IP地址库并放入到IP地址列表中,以提供数据服务
             addresses.Add( new  Address() { IPAddress =  "210.75.225.254" , Province =  "上海市" , City =  "上海市"  });
         }
                                                      
         public  Address Get( string  ipAddress)
         {
             return  addresses.FirstOrDefault(x => x.IPAddress == ipAddress);
         }
     }
}

接着在App.config配置文件中添加配置信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<? xml  version = "1.0"  encoding = "utf-8"  ?>
< configuration >
   < startup >
     < supportedRuntime  version = "v4.0"  sku = ".NETFramework,Version=v4.5"  />
   </ startup >
                                                 
   < system.serviceModel >
     < services >
       < service  name = "Service.AddressService" >
         < endpoint  address = "http://127.0.0.1:8888/addresses"
                   binding = "webHttpBinding"
                   contract = "Service.Interface.IAddress" />
       </ service >
     </ services >
   </ system.serviceModel >
</ configuration >

最后在Main方法中添加如下代码。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
namespace  Service
{
     class  Program
     {
         static  void  Main( string [] args)
         {
             using  (WebServiceHost host =  new  WebServiceHost( typeof (AddressService)))
             {
                 host.Open();
                 Console.Read();
             }
         }
     }
}

然后我们就可以运行这个控制台项目了。注意:运行程序时,请确保你当前的用户为操作系统管理员用户。

服务端准备好,我们写一下客户端的调用代码,在控制台应用程序中测试一下这个WCF Rest服务。

同样的,我们需要先在客户端的App.config文件中配置一下这个服务(也可以在代码中通过硬编码的方式进行)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<? xml  version = "1.0"  encoding = "utf-8"  ?>
< configuration >
   < startup >
     < supportedRuntime  version = "v4.0"  sku = ".NETFramework,Version=v4.5"  />
   </ startup >
   < system.serviceModel >
     < client >
       < endpoint  name = "addressService"
                  address = "http://127.0.0.1:8888/addresses"
                  binding = "webHttpBinding"
                  contract = "Service.Interface.IAddress"  />
     </ client >
   </ system.serviceModel >
</ configuration >

这里要注意,绑定模型要跟服务端模型一致,否则会有绑定不匹配的异常产生。

客户端代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
namespace  RestServiceApp
{
     class  Program
     {
         static  void  Main( string [] args)
         {
             using  (ChannelFactory<IAddress> channelFactory =  new  ChannelFactory<IAddress>( "addressService" ))
             {
                 IAddress iAddress = channelFactory.CreateChannel();
                 Address address = iAddress.Get( "210.75.225.254" );
                        
                 if  (address !=  null )
                 {
                     Console.WriteLine( string .Format( "IP来自{0},{1}" ,address.Province,address.City));
                 }
             }
         }
     }
}

保证之前建立的服务端程序在运行状态,然后我们运行一下这个客户端程序:


Center

可以看到,我们调用WCF Rest服务成功的获得了IP地址的详细信息。

既然是Get请求型的Rest服务,那么应该可以在浏览器中直接调用,我们打开浏览器输入地址。

Center

同样的获得了XML类型的数据。

那如果我们想提供JSON格式的数据给别人呢?很简单,只要在定义接口方法时,指定数据返回的格式即可。

1
2
3
4
5
6
[ServiceContract]
public  interface  IAddress
{
     [WebGet(UriTemplate =  "ip={ip}" , ResponseFormat = WebMessageFormat.Json)]
     Address Get( string  ip);
}

Center

看到这里,你是否觉得Rest非常简单易用呢?



本文转自 guwei4037  51CTO博客,原文链接:http://blog.51cto.com/csharper/1377039


相关文章
|
3天前
|
缓存 监控 API
构建高效可扩展的RESTful API:后端开发的实践指南
【4月更文挑战第26天】在现代Web开发中,构建一个高效、可扩展且易于维护的RESTful API是后端工程师必须面对的挑战。本文将深入探讨如何利用最佳实践和流行技术,设计出符合REST架构原则的服务端接口。我们将重点讨论API版本控制、资源路由、数据库优化、缓存策略以及安全性考虑等方面,旨在为开发者提供一套综合性解决方案,帮助其提升API的性能与可靠性。
|
3天前
|
缓存 前端开发 API
构建可扩展的API:REST vs GraphQL
【5月更文挑战第14天】在API设计中,REST和GraphQL是两种主要的架构风格。REST基于HTTP协议,强调资源的无状态性和客户端-服务器模型,适合简单CRUD操作。而GraphQL提供更灵活的数据查询,允许客户端精确指定需求,减少HTTP请求和数据冗余,适合复杂场景和高性能需求。选择时要考虑项目需求、技术栈、性能和团队经验。
|
3天前
|
缓存 安全 API
构建高效可扩展的RESTful API:后端架构的艺术
【4月更文挑战第25天】 在数字化时代的浪潮中,一个稳定、高效且易于扩展的后端系统是企业成功的关键。本文将探讨如何构建一个满足现代业务需求的RESTful API。我们将深入分析关键设计原则,如模块化、服务分层、缓存策略以及数据库优化,并讨论这些原则如何融入实际开发流程中。通过具体案例和最佳实践,我们的目标是为读者提供一套实用的工具和方法,以支持他们自己的后端开发工作。
|
3天前
|
缓存 负载均衡 NoSQL
构建高效可扩展的RESTful API:后端开发的最佳实践
【4月更文挑战第14天】在当今快速发展的网络应用时代,一个结构良好且高效的RESTful API是确保后端服务可靠性和性能的关键。本文深入探讨了设计和实现高效可扩展RESTful API的最佳实践,涵盖了API设计原则、数据库优化、缓存策略以及负载均衡等关键方面。文中不仅提供了具体的技术建议,还通过案例分析展示了如何应对实际开发中的挑战。
|
3天前
|
缓存 监控 安全
构建高效可扩展的RESTful API:后端开发的实战指南
在数字化转型的浪潮中,后端API的设计和实现成为连接数据与服务的关键枢纽。本文深入探讨了构建高效、可扩展的RESTful API的实践方法,涵盖了从基本设计原则到性能优化技巧的多个方面。通过分析真实案例,文章将提供一套系统的解决方案框架,帮助开发者提升API的稳定性、可维护性和响应速度,同时保证服务的高可用性和安全性。
|
3天前
|
安全 API 开发者
构建高效可扩展的RESTful API服务
在数字化转型的浪潮中,构建一个高效、可扩展且易于维护的后端API服务是企业竞争力的关键。本文将深入探讨如何利用现代后端技术栈实现RESTful API服务的优化,包括代码结构设计、性能调优、安全性强化以及微服务架构的应用。我们将通过实践案例分析,揭示后端开发的最佳实践,帮助开发者提升系统的响应速度和处理能力,同时确保服务的高可用性和安全。
40 3
|
3天前
|
XML JSON API
浅谈6种流行的API架构风格
浅谈6种流行的API架构风格
|
8月前
|
XML 缓存 API
分布式系统核心:REST风格的架构,REST成熟度模型及REST API管理
正如前文所述,正确、完整地使用REST是困难的,关键在于RoyFielding所定义的REST只是一种架构风格,它并不是规范,所以也就缺乏可以直接参考的依据。好在Leonard Richardson补充了这方面的不足。
|
SQL 存储 缓存
了解API相关范式(RPC、REST、GraphQL)
了解API相关范式(RPC、REST、GraphQL) 前言 两个独立的应用程序经常需要相互访问交谈,或则可以是同一个应用程序,但部署在不同的服务器,或者现在常用的前后端分离式架构等等需要经常相互访问交谈,因此开发人员经常搭建桥梁API(Application Programming Interfaces) 关于API的定义,你可以简单看看这篇文章-- What is an API: Definition, Types, Specifications, Documentation
192 0
|
缓存 NoSQL Shell
9个REST API设计的基本准则
通常情况下,在项目开发过程中涉及的API设计是采用REST API的模式,但并没有制定一个严格的、可理解的、可扩展的规范,从长远来看,随着项目的不断迭代,特别的在赶工期的情况下,REST API就会出现偏移。因此建议在项目初期就建立严格的API设计规范。
223 0