API接口的编写(ios为例)

   作为一名iOS 码农还是有两年多的时间了,一共换过两家公司,现在的公司主要是做.net相关的产品。在业余时间得到了同事的帮助,了解了下服务端的api接口的相关知识。这里当做一个笔记给那些刚刚接触iOS开发的新朋友了解下。PS:想当初我想了解web service的东西的时候,四处都找不到资料,要么就是soap的东东,太老,反正各种你找不到。

    采用.Net平台的实现api的方式有很多,刚来公司时用的是一般处理程序后缀为*.ashx 或者一面程序*.aspx来返回json;然后是MVC的框架返回json,好吧最后终于迎来了Web api。抛开.net这个框架,其实api的实质不外乎就是返回你需要的数据信息(以json格式展示、或者xml格式)。而这些数据信息可以是在服务后台做了一些逻辑处理a,服务端的c#代码处理逻辑(操作实体);b,用sql代码级别直接在筛选数据的时就做过滤。 当拿到这些数据后,.Net能帮我们做的事情就是序列化为json格式的东东了,然后当你请求的时候返回给客户端而已。而要弄清楚,每个环节当然有其书面的名称,建议有兴趣的可以在www.asp.net的相关章节学习。


对于iOS客户端开发人员直接面对的是前面两个框框的内容,至于后面的服务端是怎么返回json的看下面的代码吧。


[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. using BooksApi.DTOs;  
  2. using System;  
  3. using System.Collections.Generic;  
  4. using System.Linq;  
  5. using System.Linq.Expressions;  
  6. using System.Net;  
  7. using System.Net.Http;  
  8. using System.Text;  
  9. using System.Web.Http;  
  10. using System.Web.Script.Serialization;  
  11.   
  12. namespace BooksApi.Controllers  
  13. {  
  14.     [RoutePrefix("api/students")]  
  15.     public class StudentsController : ApiController  
  16.     {  
  17.   
  18.         private static readonly Expression<Func<Classmates_T, StudentDto>> AsStudentDto =  
  19.     x => new StudentDto  
  20.     {  
  21.         Name = x.Name,  
  22.         Address = x.Address,  
  23.         Phone = x.Phone  
  24.     };  
  25.         MobileVersionEntities dbctx = new MobileVersionEntities();  
  26.   
  27.         [Route("{id?}")]  
  28.         // GET api/<controller>/5  
  29.         public IQueryable<StudentDto> Get(string id = null)  
  30.         {  
  31.   
  32.             //  var result = (from u in dbctx.Classmates_T select u).ToList<Classmates_T>();  
  33.             var res = id != null ?  
  34.                 dbctx.Classmates_T.Where(o => o.Name.Contains(id) ||  
  35.                     o.Phone.Contains(id)).  
  36.                 Select(AsStudentDto) :  
  37.                 dbctx.Classmates_T.Select(AsStudentDto).AsQueryable();  
  38.             return res;  
  39.         }  
  40.   
  41.   
  42.   
  43.         // POST api/<controller>  
  44.         public void Post([FromBody]string value)  
  45.         {  
  46.   
  47.         }  
  48.   
  49.   
  50.     }  
  51. }  

那么我访问 http://192.168.20.189:6900/bk/api/students?$select=Name,Address 时候就会返回(StudentDto模型)中的两个字段,而Phone这个字段我这里并没有查

[{"Address":"四川成都高新西","Name":"段叔佑"},{"Address":"深圳","Name":"罗林"}]

的json数据。

[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. [RoutePrefix("api/students")] 为特性路由,当你访问xxxx/api/students就会对应找到该WebApi的Controller,默认会运行Get方法,然后数据库中的表Classmate_T包含的字段太多了,这里我现在代码层进行了一次筛选。建立了一个StudentDto的Model来装Classmate_T对应Model中的部分值。  
[csharp]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. 然后就是操作数据库中得到<span style="font-family: Arial, Helvetica, sans-serif;">Classmates_T,对其中得到你数据进行一次类似策略模式的处理——把Classmate_T对应的实体变成StudentDto实体。</span>  

就是这么简单的几句话,即可完成一个webapi。在代码部分做了一些扩展1,根据id 模糊查询 2,web api odata的query扩展。如果不考虑这些扩展,你写web api在后期可能无法满足等你功能变化的需求,但是总的来说.Net web api这个框架让我们更多专注逻辑的东西,而至于怎么序列化的事情我们就没有必要那么关心了。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值